我想从套接字中获取多条消息(广播),但我不知道有多少条消息,然后继续执行该程序。 消息由网络中的广播触发,因此它们应该出现在较短的时间窗口内。
我想我想在我之前设置的套接字上循环 recvfrom()
并想使用超时来知道我得到了它们。对于超时,我考虑了 select()
和 setsockopt()
并且认为第二个就足够了。
现在的问题是当我的 recvfrom()
超时时会发生什么。
它是否返回 -1 并设置一个 errno
?如果是,errno
是什么?这样我就可以获取它并继续。
还是换一种方式更好?
最佳答案
如果 O_NONBLOCK
没有在消息到达的套接字上设置。
如果套接字上没有可用消息,并且套接字的文件描述符上未设置O_NONBLOCK
,则recvfrom()
将阻塞直到消息到达。
如果套接字上没有可用消息并且套接字的文件描述符上设置了O_NONBLOCK
,recvfrom()
将失败并将错误号设置为EAGAIN
或 EWOULDBLOCK
。
关于返回值
成功完成后,recvfrom()
应返回消息的字节长度。如果没有消息可用于接收并且对等方已执行有序关闭,recvfrom()
应返回 0
。否则,该函数应返回-1
并设置errno
以指示错误。
可以找到更多详细信息here
关于c - 收集未知数量的消息,然后继续执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30980305/