Home > programming > 一个关于UDP数据发送错误的问题

一个关于UDP数据发送错误的问题

  为了能支持新项目的DMSCC和LSCP协议,决定增加UDP的功能。加上以前在系统上使用的是IOCP(win)/epoll(linux),所以新增加的UDP也尽量向采用这个机制,同时沿用以前的框架,那么外部对于socket server的使用基本保持一致。

  完成代码以后测试的时候发现了一个问题,就是经过一段时间的测试以后,UDP server就不在接收数据了。检查日志的时候发现原来是UDP server socket收到了一个报错,而我之前很蠢的认为如果udp server socket报错就代表这个socket不可再用了。后来才明白这个错误是因为server socket尝试发送一个udp数据包到client的时候因为client可以能已经关闭了socket,或者其他的原因造成数据包不可到达。这个时候系统会收到一个ICMP消息告知主机消息不可达。而这个时候IOCP就会告知说出现一个错误(在windows上错误码是1234)。当收到这个错误告知以后,再次调用WSARecvFrom即可继续接收新的udp消息。

udp 数据包不可达,收到一个ICMP消息

Categories: programming Tags: ,
  1. No comments yet.
  1. No trackbacks yet.