我只是想了解非阻塞recvfrom是如何工作的?我正在编写一个应用程序,它以某个以大约10 Mbps速度发送数据的设备进行通信。我已经创建了连续调用recvfrom的infinte循环并剥离了标头并在一些临时缓冲区中复制了其余的消息。现在我的问题是:
单次调用非阻塞recvfrom(考虑到有数据可用)只返回一个数据包吗?或者单个recvfrom也可能返回多个连接数据包?
是的,我正在使用无连接套接字(UDP)。
答案 0 :(得分:1)
UDP的情况下只有一个数据报。连接数据包将违反该协议所做的(少数)基本保证之一:发送的数据报之间的边界将被保留。
Linux的最新版本recvmmsg
允许您为每个系统调用接收多个数据报。
答案 1 :(得分:1)
recvfrom()
最多返回一个数据报。
有一个特定于Linux的呼叫recvmmsg()
可以在一次呼叫中接收多个数据报。