【问题标题】:Check if a socket disconnected in C, without select()检查 C 中的套接字是否在没有 select() 的情况下断开连接
【发布时间】:2009-05-22 21:28:14
【问题描述】:

如果没有 C 语言中的 select(),有什么方法可以检查远程端的套接字是否断开连接?

我不想使用 select() 的原因是,在我的缓冲区已满的情况下,可能会有我故意忽略的套接字上可供读取的数据和 select(readfds=[socket_fd] ) 总是会立即返回并通知我。

【问题讨论】:

    标签: c sockets


    【解决方案1】:

    如果你在socket上有一个阻塞的read()函数调用,并且它返回整数值0,这意味着socket连接被关闭了。

    while ( n = read(sockfd, buffer, BUFFER_SIZE) ) {
         //use buffer contents
    }
    

    当从另一端发送数据时,此循环将继续。

    【讨论】:

      【解决方案2】:

      所以请改用poll(),将events 设置为您关心的内容,并检查revents 中的结果。仅供参考,您可以调用 select()poll() 而不会损坏套接字或更改其缓冲区。

      【讨论】:

      • 我在这样使用 poll() 时遇到了一些问题,当套接字挂起时,revents 从不包含 POLLHUP,只是 POLLIN 不可能是真的。
      • 请参阅greenend.org.uk/rjk/2001/06/poll.html 了解有关此问题的一些有用信息。
      猜你喜欢
      • 1970-01-01
      • 2011-02-09
      • 2010-10-05
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 2013-07-22
      相关资源
      最近更新 更多