c - Socket C - setsockopt超时在关闭之前做一些事情

标签 c sockets timeout setsockopt

我使用setsockopt和SO_RCVTIMEO选项来设置我的套接字recv函数的超时。 它可以工作,但是当超过时间时它会立即关闭套接字。我想在关闭前发送消息,可以吗?

(我的程序必须在 Windows 和 Linux 上运行)

最佳答案

我认为实现它的合理方法是使用带有超时的 select(3) 。 这是一个例子: https://smnd.sk/anino/programming/c/unix_examples/poll.html 您不仅使用recv,还使用带有超时参数的select()。

  fd_set rfd;
  FD_ZERO(&rfd);
  // sock is your socket
  FD_SET(sock, &rfd);
  while (1)
  {
      timeval tv = { 1/*seconds*/, 0 /*ms*/ };
      int result = select(sock+1, &rfd, 0, 0, &tv);
      if (result == EINTR)
      {
          // timeout, send stuff and close(sock)
      }
      else if (result > 0)
      {
          if (!FD_ISSET(sock, &rfd))
          {
             recv(sock, ..);
          }
      }
  }

关于c - Socket C - setsockopt超时在关闭之前做一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56168810/

相关文章:

vim - inoremap : variable timeoutlen

c++ - OpenCV C 与 C++

c++ - 如何解决 WSAEWOULDBLOCK 错误

perl - 超时 perl 中的用户输入

timeout - ApiAxle:如果后端服务器响应缓慢,请修改超时参数

sockets - Rust 持久化 TcpStream

c - Xcode 5 在构建过程中不复制静态库文件

c - 获取数组中的元素数量未按预期工作

c - 随机矩阵结构创建

javascript - 无法使用node.js : io is not defined加载socket.io