【问题标题】:WINSOCK recv call returns -1 but WSAGetLastError() is set to 0WINSOCK recv 调用返回 -1 但 WSAGetLastError() 设置为 0
【发布时间】:2014-10-15 19:56:16
【问题描述】:

我有一段代码在 Windows 上调用 recv()。 recv() 有时会返回 -1。调用 WSAGetLastError() 返回 0。这似乎是非常奇怪的行为。以前有没有人注意到这一点。

【问题讨论】:

  • 显示您的代码。显示对recv 的调用和对WSAGetLastError 的调用。 (您调用 recvWSAGetLastError 的代码已损坏,您的 Windows 机器上有一些损坏的驱动程序/过滤器,或者您的套接字值错误。)

标签: windows sockets winsock


【解决方案1】:

WSAGetLastError() 目前是GetLastError() 的简单别名。 WinSock 不保留自己单独的错误代码(尽管没有什么可以阻止微软在未来做出这种改变)。与任何其他 Win32 API 函数一样,请确保您没有在 recv()WSAGetLastError() 之间进行 ANY Win32 调用,否则您可能会丢失错误代码。 总是在函数调用失败后立即检索错误代码,然后再执行任何其他操作。

【讨论】:

    【解决方案2】:

    我看到这个问题发生在一个程序中,该程序从一个线程调用 recv() 并在具有相同套接字句柄的另一个线程上调用 send()。我怀疑 send() 线程上的活动导致 recv() 出现问题。

    我通过重组代码以在同一个线程中执行 send() 和 recv() 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 2011-12-04
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      相关资源
      最近更新 更多