使用带轮询的UDP套接字。屏蔽与非屏蔽

时间:2019-05-31 20:58:39

标签: sockets networking udp nonblocking polling

关于非阻塞TCP套接字,可以找到很多示例,但是我发现很难找到有关如何使用poll/select/epoll系统调用处理UDP套接字的良好解释。

  • 阻止还是不阻止?

当我们必须处理tcp套接字时,将它们设置为非阻塞是有意义的,因为它只需要一个缓慢的客户端连接来防止服务器为其他客户端提供服务。但是,UDP中没有ACK消息,因此我的假设是,对于这两种情况,写入UDP应该足够快。这是否意味着如果每次我们要发送少量数据(例如10Kb),我们都可以在poll系统调用系列中安全地使用阻塞UDP套接字?在this的讨论中,我认为ARP请求是唯一可以实质上阻塞sendto功能的点,但这不是一次性的事情吗?

  • sendto的返回值

比方说套接字是非阻塞的。我是否可以尝试发送1000个字节的数据,而sendto函数仅发送部分数据(例如300个字节)?这是否意味着它刚发送了一个300字节的UDP数据包,下次我使用sendto时,我不得不考虑它将再次发送一个新的UDP数据包?仍然有这种情况可以阻止套接字吗?

  • recvfrom的返回值

相同的问题适用于recvfrom。是否有可能我需要多次调用recvfrom以获得完整的UDP数据包。是 阻塞/非阻塞套接字的行为不同。

0 个答案:

没有答案