Поэтому я пытаюсь настроить многопоточный сервер с 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).
Задача ещё не решена.
Других решений пока нет …