0

При разработке приложения Windows Desktop Console в C++ в Visual Studio 3013 для Windows Desktop, который выступает в роли клиента и пытается подключиться к серверу. Как только соединение с сервером будет успешным, он отправит сигнал подтверждения к серверу и ждет ответа от сервера. Iam, используя winsocks2 в этом приложении. Функция приема я использую блокирующий вызовКак сделать функцию recv в winsock2 остановить через определенное время ..?

iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0); 

Так, пока мой сервер не отправляет ответ, клиент блокируется. Мне нужен клиент для проверки ответа только на определенное время (скажем, 10 секунд). Если в течение этого периода времени нет ответа, я хочу, чтобы клиент отключился от сервера. Как это достичь?

ответ

0

Позвоните setsockopt на свой разъем с опцией SO_RCVTIMEO и значением таймаута в миллисекундах. Например:

DWORD timeoutMs = 10000; 
iResult = setsockopt(ConnectSocket, SOL_SOCKET, 
     SO_RCVTIMEO, &timeoutMs, sizeof(timeoutMs)); 
... 

Более подробную информацию о setsockopt на MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/ms740476%28v=vs.85%29.aspx

Смежные вопросы