recvfrom返回-1但是WSAGetLastError()返回0

时间:2012-08-21 11:53:53

标签: windows sockets udp

在远程套接字关闭时从UDP套接字接收数据期间,理想情况下它应返回“ICMP目标主机无法访问”数据。

我在Windows 7操作系统和VC2010上构建的应用程序上进行了相同的测试。

每当调用FD_READ事件集和recvfrom()函数时,它返回SOCKET_ERROR并且WSAGetLastError()将错误代码返回为0,这意味着“操作成功完成”,但它应该返回错误代码为“WSAECONNRESET” “或者应该成功读取ICMP数据。

请建议如何摆脱它。

2 个答案:

答案 0 :(得分:1)

这里有几个错误。

  1. 从对等已关闭的UDP套接字读取应无限期阻止或超时。

  2. UDP中没有RST数据包或ECONNRESET:这是TCP现象。

  3. 尝试接收时,仅在发送时不会出现“目标无法访问”。 UDP是一种无连接协议:在阅读时没有关闭对等体的固有意识。

答案 1 :(得分:1)

你错了(可能是考虑TCP) - 远程端不会以任何方式通知其UDP套接字被关闭。仅当您向远程端发送某些没有特定端口限制的内容时,才会生成ICMP响应。