【问题标题】:Windows TCP Socket Timeout C++Windows TCP 套接字超时 C++
【发布时间】:2014-05-18 11:54:17
【问题描述】:

我有一个问题

如何知道客户端是否在指定时间内没有响应服务器?!

我使用的是线程而不是选择功能。

您的帮助将不胜感激:)

谢谢。

【问题讨论】:

    标签: c++ tcp timeout winsockets


    【解决方案1】:

    您需要查看 [设置套接字选项][1],如下所示:

    setsockopt(sockid, SOL_SOCKET, SO_RCVTIMEO,(char *)&tv,sizeof(struct timeval));
    

    完成后,您可以在调用接收和/或发送函数时再次检查SOCKET_ERROR。具体错误码可以通过调用WSAGetLastError获取。

    这是潜在的错误代码之一:

    WSAEWOULDBLOCK 10035

    资源暂时不可用。

    此错误是从无法立即完成的非阻塞套接字上的操作返回的,例如当没有数据排队等待从套接字读取时的 recv。这是一个非致命错误,应稍后重试该操作。 WSAEWOULDBLOCK 报告为在非阻塞 SOCK_STREAM 套接字上调用 connect 的结果是正常的,因为必须经过一段时间才能建立连接。

    【讨论】:

    • 非常感谢?如果我理解你的回答,它只是为了在套接字上设置超时值,但是如果发生超时会调用一个函数会发生什么? .. 我想在服务器上收到超时发生的通知
    • @RehabReda:返回值会通知你。
    • 这个函数的返回值? recv(clientSocket, receivedData, BUFFER_SIZE, 0);会是什么 ?真的谢谢你:)
    • @RehabReda 您应该阅读过 Winsock 文档,其中明确指出 recv() 在错误时返回 SOCKET_ERROR,并在 WSAGetLastError() 返回的值中产生副作用。
    • @EJP:严格来说,不是-1,而是 SOCKET_ERROR。
    猜你喜欢
    • 2019-07-11
    • 2012-11-25
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2013-03-30
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多