单次调用非阻塞recvfrom

时间:2012-03-25 23:08:54

标签: c sockets

我只是想了解非阻塞recvfrom是如何工作的?我正在编写一个应用程序,它以某个以大约10 Mbps速度发送数据的设备进行通信。我已经创建了连续调用recvfrom的infinte循环并剥离了标头并在一些临时缓冲区中复制了其余的消息。现在我的问题是:

单次调用非阻塞recvfrom(考虑到有数据可用)只返回一个数据包吗?或者单个recvfrom也可能返回多个连接数据包?

更新

是的,我正在使用无连接套接字(UDP)。

2 个答案:

答案 0 :(得分:1)

UDP的情况下只有一个数据报。连接数据包将违反该协议所做的(少数)基本保证之一:发送的数据报之间的边界将被保留。

Linux的最新版本recvmmsg允许您为每个系统调用接收多个数据报。

答案 1 :(得分:1)

recvfrom()最多返回一个数据报。

有一个特定于Linux的呼叫recvmmsg()可以在一次呼叫中接收多个数据报。