非阻塞ACE_SOCK_Stream和客户端断开连接

时间:2013-10-31 11:28:22

标签: c++ sockets tcp ace

所以我试图用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)的情况相同。

0 个答案:

没有答案