与recvfrom,睡眠的关系

时间:2014-01-29 01:36:07

标签: networking udp

我不确切知道, 就我而言。

我通过Linux测试了UPnP,我只使用了recvfrom。

我得到的HTTP响应不是预期的数量。 (在这个时候,我预计3)

所以,我确实将sleep(1)置于while()中,它有效!

我有一个问题是'为什么'?

recvfrom每个数据包返回缓冲区。 < - 这就是我所知道的,与此有关系吗?

1 个答案:

答案 0 :(得分:0)

如果在无连接套接字中使用此函数,则可以对连接和无连接套接字使用recvfrom()函数。如果消息太长而无法容纳在提供的缓冲区中,则会丢弃多余的字节。为了避免这种情况"您可以设置请求功能块的标志MSG_WAITALL,直到可以返回所请求的全部数据。如果捕获到信号,如果连接终止,指定了MSG_PEEK,或者套接字的错误等待,则该函数可能返回较少量的数据。"

如果在基于流的套接字(如SOCK_STREAM)中使用recvfrom()函数,则会忽略消息边界。在这种情况下,数据一旦可用就会返回给用户,并且不会丢弃任何数据。

在您的情况下,您可以设置MSG_WAITALL标志来阻止您的套接字,而不是使用sleep(),直到可以返回所请求的全部数据。并且recvfrom()和sleep()函数之间没有关系。