-2

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

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

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

请建议如何摆脱它。

4

2 回答 2

1

你错了(可能是从 TCP 的角度思考)——远程端没有传达它的 UDP 套接字以任何方式关闭。仅当您向没有特定端口绑定的远程端发送某些内容时,才会生成 ICMP 响应。

于 2012-08-21T12:12:17.023 回答
1

这里有几个错误。

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

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

  3. 尝试接收时不会出现“无法到达的目标”,仅在发送时才会出现。UDP 是一种无连接协议:读取时不存在对等端被关闭的固有意识。

于 2012-08-21T12:10:26.483 回答