1

所以我正在尝试使用 ACE 设置多线程服务器。我正在使用非阻塞客户端套接字来防止 recv()/send() 阻塞。问题是当我使用 recv() 并且客户端断开连接不正常时,recv() 的结果并没有让我知道客户端断开连接。是否有任何其他方法来检查连接性。

这是一个简短的片段

            char buffer[4096];
            ssize_t bytesReceived = peer.recv(buffer, sizeof(buffer));

            if (bytesReceived < 1 && errno != EWOULDBLOCK)
            {
                printf("Disconnected:\n");

            }
            else if (bytesReceived > 0)
            {
                buffer[bytesReceived] = '\0';
                printf(buffer);
            }

因此,如果客户端断开连接,recv 返回 -1 但 errno 仍然是 EWOULDBLOCK。

我还尝试在 recv 中使用短暂的超时,但它会导致与不使用 errno = ETIME(TIME-Out) 相同的结果。

4

0 回答 0