0

所以.. 我正在做一个阻止 UDP 和 IO.select 的小型多人游戏。对于我的问题..(在服务器中)从刚刚向死客户端发送数据包的 UDP 套接字()读取packet, sender = @socket.recvfrom(1000)会导致 ICMP 无法访问(并且Errno::ECONNRESET在 ruby​​ 中出现异常)。问题是我找不到任何方法来提取该 ICMP 的 IP .. 所以我可以清除那个死客户端。

任何人都知道如何实现这一目标?

谢谢

4

2 回答 2

1

您需要调用recvmsg套接字,并MSG_ERRQUEUE作为标志传递。

导致错误的数据报的原始目标地址通过 msg_name 提供。

于 2010-12-31T02:51:47.557 回答
0

值得注意的是,ICMP 数据包的源 IP 地址并不总是与您的客户端相同。任何处理此连接的数据包的路由器都可能是源,ICMP 数据包的有效负载将包含 IP 标头 + 它相关的数据包的前 8 个字节。

于 2011-01-01T18:33:12.480 回答