Неблокирующая ACE_SOCK_Stream и отключение клиента

Поэтому я пытаюсь настроить многопоточный сервер с 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).

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector