您的位置:首页 > 理论基础 > 计算机网络

(转) 使用epoll的ET模式下的tcp服务处理特点

2011-08-24 18:14 337 查看
 

我们知道ET模式下的事件触发需要遇到EAGAIN结束,那么在tcp服务中不管是listen socket还是data socket,都需要做相应处理,特别是listen socket ,很容易被遗漏 , 新连接未处理,从而出现close_wait状态的socket 。
另外错误识别上,EAGAIN和EINTR一定要处理好,如果是主动连接的data socket 在non-block下还要处理EINPROGRESS 。
listen socket 处理


    while(1)

    {

        int cfd = accept(GetFD(),(sa_t*)&caddr,&clen) ;

        if ( cfd  == -1  ) 

        {

            if ( errno == EAGAIN ) return 0 ;

            //other else  continue or close the socket

            //else if ( errno == EINTR ) continue ;
            //return -1 ;

        }

        set_nonblock(cfd) ;

        //set_sock_nodelay(cfd) ;

        //set_sock_linger(cfd) ;
        if ( OnNewClient(cfd) != 0 )

        {

            close(cfd) ;

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tcp socket