linux下非阻塞模式网络通讯模型示例分享

2019-09-30 18:53:16刘景俊

        // 检测是否可读
        if ( true == bWhichSet )
        {
            // 清除其所有位
            FD_ZERO( &rset );
            // 设置关心的描述符
            FD_SET( sockfd, &rset );

            // 大于零(0) - 有套接字可读,零(0) - 没有,负数 - 出错
            if ( 0 < select( sockfd + 1, // 从描述符零(0)开始搜索,故此要对套接字描述符加壹(1)
                             &rset,      // 可读描述符集
                             NULL,       // 可写描述符集
                             NULL,       // 异常描述符集
                             &tv ) )     // 等待时间
            {
                // 可读描述符是我们的套接字
                if ( FD_ISSET( sockfd, &rset ) )
                {
                    iReturnValue = 0;
                    break;
                }
            }
        }
        // 检测是否可写
        else
        {
            // 清除其所有位
            FD_ZERO( &wset );
            // 设置关心的描述符