《Linux高性能服务器编程》高清pdf+


《Linux高性能服务器编程》高清pdf+附带源码
资源截图
代码片段和文件信息
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define MAX_EVENT_NUMBER 1024
static int pipefd[2];

int setnonblocking( int fd )
{
    int old_option = fcntl( fd F_GETFL );
    int new_option = old_option | O_NONBLOCK;
    fcntl( fd F_SETFL new_option );
    return old_option;
}

void addfd( int epollfd int fd )
{
    epoll_event event;
    event.data.fd = fd;
    event.events = EPOLLIN | EPOLLET;
    epoll_ctl( epollfd EPOLL_CTL_ADD fd &event );
    setnonblocking( fd );
}

void sig_handler( int sig )
{
    int save_errno = errno;
    int msg = sig;
    send( pipefd[1] ( char* )&msg 1 0 );
    errno = save_errno;
}

void addsig( int sig )
{
    struct sigaction sa;
    memset( &sa ‘‘ sizeof( sa ) );
    sa.sa_handler = sig_handler;
    sa.sa_flags |= SA_RESTART;
    sigfillset( &sa.sa_mask );
    assert( sigaction( sig &sa NULL ) != -1 );
}

int main( int argc char* argv[] )
{
    if( argc <= 2 )
    {
        printf( “usage: %s ip_address port_number
“ basename( argv[0] ) );
        return 1;
    }
    const char* ip = argv[1];
    int port = atoi( argv[2] );

    int ret = 0;
    struct sockaddr_in address;
    bzero( &address sizeof( address ) );
    address.sin_family = AF_INET;
    inet_pton( AF_INET ip &address.sin_addr );
    address.sin_port = htons( port );

    int listenfd = socket( PF_INET SOCK_STREAM 0 );
    assert( listenfd >= 0 );

    //int nReuseAddr = 1;
    //setsockopt( listenfd SOL_SOCKET SO_REUSEADDR &nReuseAddr sizeof( nReuseAddr ) );
    ret = bind( listenfd ( struct sockaddr* )&address sizeof( address ) );
    if( ret == -1 )
    {
        printf( “errno is %d
“ errno );
        return 1;
    }
    //assert( ret != -1 );

    ret = listen( listenfd 5 );
    assert( ret != -1 );

    epoll_event events[ MAX_EVENT_NUMBER ];
    int epollfd = epoll_create( 5 );
    assert( epollfd != -1 );
    addfd( epollfd listenfd );

    ret = socketpair( PF_UNIX SOCK_STREAM 0 pipefd );
    assert( ret != -1 );
    setnonblocking( pipefd[1] );
    addfd( epollfd pipefd[0] );

    // add all the interesting signals here
    addsig( SIGHUP );
    addsig( SIGCHLD );
    addsig( SIGTERM );
    addsig( SIGINT );
    bool stop_server = false;

    while( !stop_server )
    {
        int number = epoll_wait( epollfd events MAX_EVENT_NUMBER -1 );
        if ( ( number < 0 ) && ( errno != EINTR ) )
        {
            printf( “epoll failure
“ );
            break;
        }
    
        for ( int i = 0; i < number; i++ )
        {
            int sockfd = events[i].data.fd;
            if( sockfd == listenfd )
            {
                struct sockaddr_in client_address;
                socklen_t client_addrlength = sizeof( client_address );
            

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-27 15:42  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜
     文件        6148  2018-04-27 15:42  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜.DS_Store
     目录           0  2018-04-27 15:42  __MACOSX
     目录           0  2018-04-27 15:42  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜
     文件         120  2018-04-27 15:42  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜._.DS_Store
     目录           0  2018-04-27 15:42  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes
     文件        6148  2018-04-27 15:42  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes.DS_Store
     目录           0  2018-04-27 15:42  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes
     文件         120  2018-04-27 15:42  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes._.DS_Store
     目录           0  2013-03-04 20:21  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes9
     文件        2100  2012-05-11 21:55  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes99-6mytalk_client.cpp
     目录           0  2018-04-27 15:42  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes9
     文件         212  2012-05-11 21:55  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes9._9-6mytalk_client.cpp
     文件        2736  2012-06-13 02:53  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes99-5unblockconnect.cpp
     文件         212  2012-06-13 02:53  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes9._9-5unblockconnect.cpp
     文件        4303  2013-03-04 20:18  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes99-8multi_port.cpp.bak
     文件         212  2013-03-04 20:18  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes9._9-8multi_port.cpp.bak
     文件        4400  2012-05-11 01:39  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes99-3mtlt.cpp
     文件         212  2012-05-11 01:39  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes9._9-3mtlt.cpp
     文件        4254  2013-03-04 20:21  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes99-8multi_port.cpp
     文件         212  2013-03-04 20:21  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes9._9-8multi_port.cpp
     文件        2515  2012-05-06 15:23  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes99-1use_select.cpp
     文件         212  2012-05-06 15:23  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes9._9-1use_select.cpp
     文件        5749  2012-05-12 01:50  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes99-7mytalk_server.cpp
     文件         212  2012-05-12 01:50  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes9._9-7mytalk_server.cpp
     文件        3899  2012-05-10 22:41  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes99-4oneshot.cpp
     文件         212  2012-05-10 22:41  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes9._9-4oneshot.cpp
     文件         212  2013-03-04 20:21  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes._9
     目录           0  2013-01-18 19:15  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes11
     文件        3657  2012-05-24 16:26  Linux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes1111-2lst_timer.h
     目录           0  2018-04-27 15:42  __MACOSXLinux楂樻€ц兘鏈嶅姟鍣ㄧ紪绋嬫竻鏅癙DF+婧愮爜LinuxServerCodes11
............此处省略143个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)