diff --git a/src/Netra.cpp b/src/Netra.cpp index 1deba5b..19e5f2e 100644 --- a/src/Netra.cpp +++ b/src/Netra.cpp @@ -185,6 +185,21 @@ namespace QCL } } + bool TcpServer::isClientDisconnected(int clientSock) + { + char tmp; + ssize_t n = recv(clientSock, &tmp, 1, MSG_PEEK | MSG_DONTWAIT); + if (n == 0) + return true; // 对端有序关闭 + if (n < 0) + { + if (errno == EAGAIN || errno == EWOULDBLOCK) + return false; // 只是暂时无数据 + return true; // 其它错误视为断开 + } + return false; // 有数据可读 + } + /** * @brief 获取当前所有客户端Socket副本(线程安全) * @return 包含所有客户端socket的vector副本