如何使winsock2中的recv函数在特定时间后停止..?

时间:2015-04-28 07:46:21

标签: visual-c++ client-server windows-8.1 console-application winsock2

在Windows桌面的Visual Studio 3013中用c ++开发Windows桌面控制台应用程序,它充当客户端并尝试连接到服务器。一旦与服务器的连接成功,它就会向服务器发送握手信号并等待服务器的响应。我在这个应用程序中使用winsocks2。 我正在使用的接收功能是阻塞呼叫

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

因此,在我的服务器发送响应之前,客户端被阻止。 我需要的是客户端仅在特定时间(例如10秒)检查响应。如果在此时间范围内没有响应,我希望客户端与服务器断开连接。 怎么做到这一点?

1 个答案:

答案 0 :(得分:0)

使用setsockopt选项在套接字上调用SO_RCVTIMEO,并以毫秒为单位调用超时值。例如:

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

有关MSDN上setsockopt的更多详细信息:https://msdn.microsoft.com/en-us/library/windows/desktop/ms740476%28v=vs.85%29.aspx