UDP协议是无连接的不可靠的数据报传输协议,与TCP协议不同的是,它发送数据时不需要调用connect函数(特殊情况也可调用),客户端只需要调用sendto函数给服务器发送数据报,其中必须指定目的地地址作为参数,服务器只需要调用recvfrom函数等待某个数据报的到达。
大多数UDP服务器是迭代服务器(iterative server),大多数TCP服务器是并发服务器。
每个UDP套接字都有一个接受缓冲区,到达该套接字的数据报都进入这个套接字接受缓冲区,当进程调用recvfrom时,缓冲区中的下一个数据报以FIFO顺序返回个进程,所以UDP层中是有隐含排队发生的,接受缓冲区大小可以通过设置SO_RCVBUF套接字选项修改。
recvfrom和sendto函数的原型是
#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags,
struct sockaddr *from, socklen_t *addrlen);
ssize_t sendto(int sockfd, c