在Windows桌面的Visual Studio 3013中用c ++开发Windows桌面控制台应用程序,它充当客户端并尝试连接到服务器。一旦与服务器的连接成功,它就会向服务器发送握手信号并等待服务器的响应。我在这个应用程序中使用winsocks2。 我正在使用的接收功能是阻塞呼叫
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
因此,在我的服务器发送响应之前,客户端被阻止。 我需要的是客户端仅在特定时间(例如10秒)检查响应。如果在此时间范围内没有响应,我希望客户端与服务器断开连接。 怎么做到这一点?
答案 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