函数原型
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
参数解释:
sockfd: 这是已经创建并绑定的套接字的文件描述符。
buf: 这是一个指向缓冲区的指针,用于存储接收到的数据。
len: 这是缓冲区 buf 的大小,以字节为单位。
flags: 这是一些标志位,用于修改 recvfrom 的行为。例如,MSG_DONTWAIT 表示非阻塞模式,MSG_WAITALL 表示等待直到接收到指定长度的数据。
src_addr: 这是一个指向 sockaddr 结构体的指针,用于存储发送方的地址信息。如果不需要获取发送方的地址,可以设置为 NULL。
addrlen: 这是一个指向整型的指针,用于指定 src_addr 结构体的大小。在调用 recvfrom 之前,应该将其设置为 src_addr 结构体的大小,在调用之后,它将被设置为新接收到的地址的实际大小。
返回值:
如果成功,recvfrom 返回接收到的字节数。
如果连接被对方优雅地关闭,返回 0。
如果发生错误,返回 -1,并设置全局变量 errno 来指示错误的原因。
使用 recvfrom 时,需要处理可能出现的各种错误情况,例如,如果套接字处于非阻塞模式并且没有数据可读,recvfrom 可能会返回 EAGAIN 或 EWOULDBLOCK 错误。
buf数据存储模式为 网络数据报文模式为大端存储。