插座C-设置超时在关闭之前做一些事情



i使用so_rcvTimeo选项使用setSockopt在我的套接字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, ..);
          }
      }
  }

我找到了一种方法:插座在关闭之前进行recv((,因此我检查套接字recive"是否可以发送消息。此后,插座关闭。

最新更新