c 如何使用select查看socket是否关闭

新手上路,请多包涵

有人可以提供一个示例,说明如何使用 select() 查看客户端是否关闭了套接字上的连接?

供参考。我正在使用Linux。

谢谢!

原文由 poy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 710
1 个回答

下面的代码片段首先检查套接字是否标记为可读(关闭时为可读),然后检查是否实际上有任何内容要读取。

 #include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/ioctl.h>

bool isclosed(int sock) {
  fd_set rfd;
  FD_ZERO(&rfd);
  FD_SET(sock, &rfd);
  timeval tv = { 0 };
  select(sock+1, &rfd, 0, 0, &tv);
  if (!FD_ISSET(sock, &rfd))
    return false;
  int n = 0;
  ioctl(sock, FIONREAD, &n);
  return n == 0;
}

原文由 Erik 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题