为什么在UDP套接字的情况下连续的recvfrom()调用是阻塞的

Gou*_*ham 0 c sockets linux io

在简单的客户端 - 服务器程序中,客户端正在发送12个字节的数据.我正在使用recvfrom(),在连续调用中请求2和10个字节.在第一次调用的情况下,recvfrom()返回2个字节.但第二个电话是封锁.为什么会这样?我认为它不会发生TCP套接字,其中连续的读取调用返回可用字节(这里10).

Mar*_*ins 5

手册页有以下相关信息(粗体加):

对于基于消息的套接字,例如SOCK_RAW,SOCK_DGRAM和SOCK_SEQPACKET,应在单个操作中读取整个消息.如果消息太长而无法容纳在提供的缓冲区中,并且在flags参数中未设置MSG_PEEK,则应丢弃多余的字节.

您需要在一次通话中阅读它.