我正在尝试学习套接字。到目前为止,我成功地打开了一个套接字(作为服务器),连接以及发送和接收一些数据。
现在,我试图在accept()
函数中设置等待时间的限制。
我找到了一些代码示例,但目前还没有成功:
//socket, bind...
listen(this->sockfd, 1);
int iResult;
struct timeval tv;
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(0, &rfds);
tv.tv_sec = 5;
iResult = select(0, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
if(iResult > 0)
{
std::cout<< "connected"<<endl;
} else {
std::cout<< "time out!" << endl;
}
我总是得到“超时!”。
你能指点什么错吗?谢谢
最佳答案
更改
FD_SET(0, &rfds);
// ...
iResult = select(0, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
至
FD_SET(this->sockfd, &rfds);
// ...
iResult = select(this->sockfd + 1, &rfds, nullptr, nullptr, &tv);