返回ENOBUFS的recvmsg()是否也返回可用消息?

时间:2017-08-23 18:22:23

标签: sockets netlink

我正在使用 NETLINK套接字在用户空间应用程序中接收 NETLINK_ROUTE 通知。

我了解在以下时间recvmsg()会返回 ENOBUFS 错误:

  1. 用户空间应用程序太慢,无法处理内核子系统以给定速率发送的所有NETLINK消息。
  2. 用于存储从内核到用户空间的消息的队列太小。
  3. 现在,我确信第二点在我的情况下不会发生,因为我最初可以收到某些通知而没有任何错误。

    一段时间后,我收到 ENOBUFS 错误。

    我怀疑当recvmsg()返回 ENOBUFS 时:

    • 它还会填充并返回仍在的可用消息 套接字缓冲区?
    • 或者只是返回 ENOBUFS

    因为根据我的理解,如果套接字缓冲区已满并且NETLINK无法再将更多通知写入套接字缓冲区,则意味着仍然需要从套接字读取消息。

0 个答案:

没有答案