1

次の関数を作成しましたが、正常に動作しています。

bool NetworkSocket::isSocketReady()
{

    /// Got here because iSelectReturn > 0 thus data available on at least one descriptor
    // Is our socket in the return list of readable sockets
    bool             res;
    fd_set          sready;
    struct timeval  nowait;

    FD_ZERO(&sready);
    FD_SET((unsigned int)this->socketFD,&sready);
    //bzero((char *)&nowait,sizeof(nowait));
    memset((char *)&nowait,0,sizeof(nowait));

    res = select(this->socketFD+1,&sready,NULL,NULL,&nowait);
    if( FD_ISSET(this->socketFD,&sready) )
        res = true;
    else
        res = false;


    return res;

}

上記の関数は、ソケットが動作する準備ができているときに true を返します。ソケットにデータがあるかどうかをテストする方法を知っていますか?

4

1 に答える 1

4

ソケットが動作する準備ができたら true を返します

いいえ。EWOULDBLOCK/EAGAIN を取得せずに read() を実行できる場合、つまり、ブロックせずにすぐに読み取ることができるものがある場合は、true を返します。

ソケットにデータがあるかどうかを確認できますか

あなたはすでにそれを見つけました。

于 2012-08-01T08:47:47.133 に答える