【问题标题】:Single call to non-blocking recvfrom对非阻塞 recvfrom 的单次调用
【发布时间】:2012-03-25 23:08:54
【问题描述】:

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

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

更新

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

【问题讨论】:

  • 按数据包...您使用的是 UDP 吗?

标签: c sockets


【解决方案1】:

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

最新版本的 Linux 具有 recvmmsg,可让您在每个系统调用中接收多个数据报。

【讨论】:

    【解决方案2】:

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

    有一个特定于 Linux 的调用 recvmmsg() 在一次调用中接收多个数据报。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 2014-03-23
      • 1970-01-01
      • 2011-10-16
      相关资源
      最近更新 更多