我编写了以下函数,它工作正常:
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,你知道我测试套接字是否有数据如何测试它?
答案 0 :(得分:4)
当socket准备工作时返回true
没有。当read()可以在没有获得EWOULDBLOCK / EAGAIN的情况下执行时返回true,即如果有东西可以立即读取而没有阻塞。
你知道我测试套接字是否有数据
你已经找到了它。