UDP的无连接

UDP无连接

调用bind()后,一个UDP socket是无连接的,是不能调用send()或者write()函数的,因为目的地址不知道;但是sendto()可以调用,因为sendto()可以带
int __flags, __CONST_SOCKADDR_ARG __addr,
指明对方的IP地址

UDP也通过对一个socket调用connect(),来记录目标的IP地址和端口号。也就是说,可以调用send()或者write().这两个函数会使用在connect()函数中指定的IP和端口号 作为UDP包的目标地址。

调用connect()函数之后,只有你connect()函数中指明的IP和端口号,返回的UDP datagrams才会交给你,其他包都不会传给你。更重要的是,为了接受到ICMP错误,UDP socket必须被connect

在用socket()创建之后,如果你不调用connec()或者bind(), 你就必须在recvfrom()中指定 目标的IP和端口号,否则
你会收到太多的UDP包,很多都不是你想要的。

你可能感兴趣的:(socket)