1、udp和tcp可以分别绑定到同一个端口
yes,比如DNS可以同时支持tcp和udp,端口都是53
注意与SO_REUSEADDR的区别
2、udp也可以调用connect
yes,如此即只收取connect指定的远端ip和端口发来的数据
此处connect不会触发三次握手,所以如果对端不可达,只有调用send时才会收到错误信息,而tcp在connect时就会收到不可达的错误
3、udp接收缓冲区满则将后续数据直接丢弃,无提示
yes,
4、recvfrom可以在udp上分多次读取一个数据包
no,对于UDP协议,若一次无法读取完一个数据包,则该数据包的其他数据被丢弃。
比如,发端缓冲区32字节,收端缓冲区16字节,若发端发了20个字节数据,则收端通过一次recvfrom只能得到16个字节(受限于接收缓冲区),其余4个被丢弃。
5、sendto可以发送长度为0的数据包,即recvfrom正常可返回0
yes
长度为0的数据包只有一个ip头和一个udp头而没有数据。
tcp的read如果返回0则表示对端关闭了连接
6、只有udp支持多播可广播,tcp不支持
yes,因为广播和多播不建立连接,而且也不能建立连接,比如ARP
阅读(1721) | 评论(0) | 转发(0) |