Socket select()在Windows中运行,在Linux中超时

Ali*_*deh 6 c++ sockets linux select

我正在将一个Windows网络应用程序移植到Linux,并在linux上选择调用时遇到超时问题.以下函数阻止整个超时值,并在我检查客户端已发送数据的数据包嗅探器时返回.

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);
}
Run Code Online (Sandbox Code Playgroud)

epa*_*tel 13

我认为select()应该是第一个参数socket+1.

你真的应该使用另一个名字,因为它socket也用于其他事情.通常sock是使用.

  • 不需要暗示 - 在Microsoft的文档中明确说明了`select()`:http://msdn.microsoft.com/en-us/library/ms740141%28VS.85%29.aspx (4认同)