当前位置: 技术问答>linux和unix
有关UDP套接口connect()后的影响
来源: 互联网 发布时间:2016-05-07
本文导语: 有个事我一直不明白,connect后的udp套接口是怎么做到发送数据成功与否的检测的?直接sendto无法检测,为何connect后write就可以? | 几年前看过一本书,印象中里面有这方面的东西,具体细节...
有个事我一直不明白,connect后的udp套接口是怎么做到发送数据成功与否的检测的?直接sendto无法检测,为何connect后write就可以?
|
几年前看过一本书,印象中里面有这方面的东西,具体细节记不清了,有兴趣的话你可以把这本书下载下来看看。
书名叫《understanding linux network internals》
书名叫《understanding linux network internals》
|
不过感觉 icmp 如果返回的话,应该有发送的UDP头,其中包含 目的IP 和 目的端口 ,照理不也能 区分嘛? 也没看完全明白。期待更强解释。。。
这样是区分不出来的,因为我们不光要区分目的,还要区分那一次发送的,比如你连续两次向同一个地址发送数据.
这样是区分不出来的,因为我们不光要区分目的,还要区分那一次发送的,比如你连续两次向同一个地址发送数据.
|
udp connect 后 内核 记录住 你的connect中目的 IP 和 PORT 以后你就可以read 和 调用write 同时内核会告诉你所连接的套接字的异步错误
比如:
一旦出错向一个不存在的主机发送 会收到ICMP host unreachable 内核会帮你处理这个icmp报文 同时 write置错
如果是非connect的话 如果内核也会收到这个ICMP(显然这肯定不是俺们能控制的,路由器发的),但是它就不care这个东东。
至于原因:
据说是 从发送 到 收到 icmp是有一定的时延的, 如果是 Sendto 你往二个目的地址 写数据报 1成功1失败 如果这时候内核收到icmp 报文它不知道 是哪个sendto。
好象是UNP说的 ,不过感觉 icmp 如果返回的话,应该有发送的UDP头,其中包含 目的IP 和 目的端口 ,照理不也能 区分嘛? 也没看完全明白。期待更强解释。。。
比如:
一旦出错向一个不存在的主机发送 会收到ICMP host unreachable 内核会帮你处理这个icmp报文 同时 write置错
如果是非connect的话 如果内核也会收到这个ICMP(显然这肯定不是俺们能控制的,路由器发的),但是它就不care这个东东。
至于原因:
据说是 从发送 到 收到 icmp是有一定的时延的, 如果是 Sendto 你往二个目的地址 写数据报 1成功1失败 如果这时候内核收到icmp 报文它不知道 是哪个sendto。
好象是UNP说的 ,不过感觉 icmp 如果返回的话,应该有发送的UDP头,其中包含 目的IP 和 目的端口 ,照理不也能 区分嘛? 也没看完全明白。期待更强解释。。。
|
UDP是面向无连接的,应该是不关心数据的发送成功与否的。验证数据发送成功要靠自己来实现,比如让应答端发送一个反馈。
|
路过,前段时间俺就给这个UDP烦死了,不过现在解决了。