c++ - Socket select() 在 Windows 下有效,在 Linux 下超时

标签 c++ linux sockets select

我正在将一个 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/

相关文章:

c++ - TCP 连接无效连接 block 端口

c - BSD - 使用任何可用的端口?

c++ - C++中复制构造函数的困惑

C管道编程: passing data using a pipe

linux - 我想复制文件中的一行并进行一些更改

c++ - 重定向std::cout to syslog on linux

c - 具有不同定义的类型转换结构

c++ - 为什么 ranges::split_view 不是双向范围?

c++ - boost:如何监视互斥体的状态并在死锁时强制释放

c++ - 通过命令行为 Visual Studio 配置 QtPackage