我一直在尝试学习边缘触发的epoll
编程。我很困惑关于epoll_wait
之后如何循环recv
直到它返回EAGAIN
的UDP套接字 - 这是否意味着我应该循环recvfrom
,直到它返回EAGAIN
为止?如果是这样,这意味着我将不得不缓冲UDP数据包,以防我的应用程序尝试读取比接收的字节更少的字节。但是,如果我循环recvfrom
,我可能会从不同的来源获得多个数据包 - 我也可能需要缓冲sockaddr
s。这是真的?
答案 0 :(得分:2)
EAGAIN
= EWOULDBLOCK
出现。你必须在这个套接字描述符上设置O_NONBLOCK才能实现它。epol_wait
,而EAGAIN
没有结束reader starvation
,您应该保存在此FD上接收的信息不完整的信息,例如收到100个数据包。之后你应该尝试另一个FD。当您决定返回事件循环时,只需分析保存的信息并尝试接收未接收的数据包。sockaddr
的评价。