我正在将一个 Windows 网络应用程序移植到 Linux,但在 Linux 上遇到了 select 调用的超时问题。当我用数据包嗅探器检查客户端已经发送数据时,以下函数会阻塞整个超时值并返回。
int recvTimeOutTCP( SOCKET socket, long sec, long usec )
{
struct timeval timeout;
fd_set fds;.
timeout.tv_sec = sec;
timeout.tv_usec = usec;
FD_ZERO( &fds );
FD_SET( socket, &fds );
// Possible return values:
// -1: error occurred
// 0: timed out
// > 0: data ready to be read
cerr << "Waiting on fd " << socket << endl;
return select(1, &fds, 0, 0, &timeout);
}
最佳答案
我认为 select()
的第一个参数应该是 socket+1
。
您真的应该使用另一个名称,因为 socket
也用于其他用途。通常使用sock
。
关于c++ - Socket select() 在 Windows 下有效,在 Linux 下超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2008059/