@zwh8800
2017-08-23T10:02:22.000000Z
字数 569
阅读 194306
blog
归档
网络编程
错题本
Linux
对udp套接字执行read时一直报错: connection refused. 关键是udp还会报connection就太不正常了, udp可是无连接的.
对udp套接字执行read时一直报错: connection refused. 关键是udp还会报connection就太不正常了, udp可是无连接的.
刚刚查到了这篇博文: UDP怎么会返回Connection refused 原来是因为对端传来了一个ICMP包(传来一个port unreachable), 结果某些内核会把这个包为已连接(执行过connect函数)的udp套接字保存起来, 并在下一次操作时(读取, 写入)返回一个connection refused错误.
但是到底为什么会有一个ICMP包, 刚刚做了些实验, 原因是 一台客户机和stun服务器建立udp连接之后, nat路由器会记录下这条路线[既保存下这个四元组], 如果有非stun服务器的主机向客户机端口发来udp包, 会返回一个ICMP错误. (想想你这路由器真够没事找事呢, 可能是为了安全性考虑?)
现在的想法是, 客户机另开一个端口和另一台客户进行p2p通讯, 不再用和stun通讯的端口, 应该可以解决问题.
具体做法是在向stun服务器登陆时, 报出另一条线路的端口.