linux下UDP编程

来源:互联网 发布:贪婪洞窟淘宝刷钻石 编辑:程序博客网 时间:2024/05/22 23:58

1.UDP数据包接收时,应用层的socket的接收buf如果小于到达包的大小,那buf中就只存储可接收的大小,这个包余下数据会被丢弃,再也收不到。

2.recvfrom返回0 ,并不代表对方关闭socket,对方可以发送0个长度空包

3.如果客户端没有先使用connect设置通信的对方地址

         a。那必须使用sendto 、recvfrom

 b。即使服务器没有开,sendto依然可以成功,但recvfrom会一直阻塞

如果先connect了

        a。那除send、recv可以用sendo、recvfrom。

        b。如果服务器不可达,send、sendto(这会成功),然后recv,recvrom会返回错误-1.(如果没有先send或者sendto,客户端就收不到服务器不可达的ICMP包,recv、recvfrom依然会一直阻塞)

udp的发送send、sendto不会因为服务器不可达,不能联通而报错,

之所以服务器不可达,客户端在没有先connect的情况下recv、recvfrom会一直阻塞是因为tcp/ip 协议栈不会将ICMP包返回给未连接的socket(虽然send.、sendto没有报错,但实际上这个socket并没有连接过)

0 0
原创粉丝点击