WINSOCK recv调用返回-1但WSAGetLastError()设置为0

时间:2014-08-22 03:04:02

标签: windows sockets winsock

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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