如何在C ++中找出socket有数据

时间:2012-08-01 08:35:35

标签: c++ linux sockets udp buffer

我编写了以下函数,它工作正常:

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,你知道我测试套接字是否有数据如何测试它?

1 个答案:

答案 0 :(得分:4)

  

当socket准备工作时返回true

没有。当read()可以在没有获得EWOULDBLOCK / EAGAIN的情况下执行时返回true,即如果有东西可以立即读取而没有阻塞。

  

你知道我测试套接字是否有数据

你已经找到了它。