代码之家  ›  专栏  ›  技术社区  ›  avd

对原始套接字使用recvfrom():一般疑问

  •  2
  • avd  · 技术社区  · 16 年前

    我已经创建了一个原始套接字,它从数据链路层获取所有IPv4数据包(数据链路层头被删除)。以及阅读我使用的数据包 recvfrom .

    我的疑问是: 假设由于操作系统进行了一些调度,我的进程休眠了1秒。当它醒来的时候,它醒了 接收数据 (要接收的字节数为1000)在这个原始套接字上(打算接收 只有一个 IPv4数据包,并表示此数据包的大小为380字节)。假设在此期间许多网络应用程序同时运行,那么所有IPv4数据包都必须在该套接字的接收缓冲区中排队。所以现在 接收数据

    那么如何预防这种情况呢?我应该逐字节读取并解析每个字节,但这是非常低效的。

    2 回复  |  直到 16 年前
        1
  •  2
  •   abyx    16 年前

    IIRC, recvfrom()

        2
  •  1
  •   Steve-o    16 年前

    你可能会对我感兴趣 recvmmsg() 如果您想在一个系统调用中读取多个数据包。仅限最新的Linux内核,没有等效的发送端实现。