在远程套接字关闭时从UDP套接字接收数据期间,理想情况下它应返回“ICMP目标主机无法访问”数据。
我在Windows 7操作系统和VC2010上构建的应用程序上进行了相同的测试。
每当调用FD_READ事件集和recvfrom()函数时,它返回SOCKET_ERROR并且WSAGetLastError()将错误代码返回为0,这意味着“操作成功完成”,但它应该返回错误代码为“WSAECONNRESET” “或者应该成功读取ICMP数据。
请建议如何摆脱它。
答案 0 :(得分:1)
这里有几个错误。
从对等已关闭的UDP套接字读取应无限期阻止或超时。
UDP中没有RST数据包或ECONNRESET:这是TCP现象。
尝试接收时,仅在发送时不会出现“目标无法访问”。 UDP是一种无连接协议:在阅读时没有关闭对等体的固有意识。
答案 1 :(得分:1)
你错了(可能是考虑TCP) - 远程端不会以任何方式通知其UDP套接字被关闭。仅当您向远程端发送某些没有特定端口限制的内容时,才会生成ICMP响应。