下面的代码片段首先检查套接字是否标记为可读(关闭时为可读),然后检查是否实际上有任何内容要读取。 #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 许可协议
下面的代码片段首先检查套接字是否标记为可读(关闭时为可读),然后检查是否实际上有任何内容要读取。