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

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

        if ( iResult != (int)strlen( (const char*)pucSRBuffer ) )
        {
            DEBUG_OUTPUT( "Call send is failed" );

            iResult = -8;
            break;
        }

        // 7.判断是否可读 - 即服务端是否返回数据
        iResult = wait_rw_able( iServerSocket, // 服务端收发套接字
                                true,          // 是否可读
                                750000  );     // 750毫秒
        if ( 0 != iResult )
        {
            DEBUG_OUTPUT( "Waitting for recevie data has time out" );

            iResult = -9;
            break;
        }

        // 清零(0),方便调用者计算收到的通讯协议数据长度
        memset( pucSRBuffer, 0, usBufferLen );
        do
        {
            // 8.从客户端接收数据
            iResult = recv( iServerSocket,                        // 服务端收发套接字
                            pucSRBuffer + usRealReceivedData,     // 存放数据的缓冲区地址
                            usBufferLen - usRealReceivedData - 1, // 每次读出的字节
                            0 );                                  // 默认为零(0),无特殊要求