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