1. UDP的connect函数,给udp进行了链接,那么udp的异步错误是不会返回到udp套接字的。
2. 所以说,一般情况下,不connect的udp是不知道对面有没有错的,如果有错,那真的是晕啊。因为万一对面服务挂了,客户端一直都不知道,一直等到死。
3.对于已连接的udp, (比较适合长时间通信的需求)
1. 我们不能使用sendto,而改用write,send,
2.不使用recvfrom,而改用read,recv,recvmsg
3.异步错误会返回给用户进程,而未连接的不会返回
4.再次调用connect有2个目的:1.指定新的ip和端口 (指定新的即可)2.断开套接字 (family成员设置为AF_UNSPEC:sin_family,sin6_family)
对于tcp来说,connect只能调用一次,万万不可调用2次。TCP层为连接状态的维持保留有一段时间,在这段时间内连接状态没有被修改之前是不允许重复connect的。TCP的有一个种2MSL等待时间。
5.udp在发送数据的时候才知道链接不上,而tcp还没有发送数据的时候,就已经知道链接不上鸟。
6.另外,udp缺乏流量控制,udp发送端淹没接收端是轻而易举的事情。因套接字满而丢弃鸟。高级udp编程时再讲解如何给udp程序增加一些可靠性。
7.
封装时包头信息不一样,任意帧在网络上可以区分出是UDP包还是TCP包,所以即使IP地址和端口相同,也不会导致冲突。端口号表示发送进程和接收进程。在图1.8中,我们画出了TCP和UDP用目的端口号
二。高级udp套接字编程