【问题标题】:How to make the recv function in winsock2 stop after a specific time..?如何使winsock2中的recv函数在特定时间后停止..?
【发布时间】:2015-04-28 07:46:21
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    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

    【讨论】:

      猜你喜欢
      • 2019-06-28
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2014-06-17
      • 2018-12-25
      • 1970-01-01
      相关资源
      最近更新 更多