【发布时间】:2011-09-12 17:49:13
【问题描述】:
我正在编写一个从单个发送方接收 UDP 数据报的客户端。所有 IO 都将在单个线程中完成。通常,要么没有数据,要么有 30 MBit/s 的流。我主要关心的是保持尽可能低的延迟。
计划是阻塞,等待数据,在一个短暂的超时循环中,以便 IO 线程可以响应关闭请求等。
我倾向于使用阻塞套接字,为其设置超时,然后调用recvfrom()。但是,这似乎比非阻塞套接字上的 select()/poll() 和 recvfrom() 组合要少得多。
鉴于我只使用单个套接字,似乎非阻塞方法不必要地复杂。我还缺少其他东西吗?在这种特殊情况下是否有理由更喜欢非阻塞套接字?
【问题讨论】:
-
您甚至不需要超时 - 您可以向您的接收线程发送信号以使
recvfrom()立即返回errno == EINTR。
标签: c sockets udp nonblocking latency