【发布时间】:2013-10-03 21:16:01
【问题描述】:
我看过一些比较 select() 与 poll() 或 epoll() 的文章,并且我看过许多指南讨论 select() 与多个套接字的实际用法。
但是,我似乎找不到与没有select() 的非阻塞recv() 调用进行比较。如果只有 1 个套接字可读取和 1 个套接字可写入,是否有任何理由使用 select() 调用? recv() 方法可以设置为在没有可用数据时不阻塞并返回错误 (WSAEWOULDBLOCK),那么当您没有其他要检查的套接字时为什么还要调用 select() 呢?非阻塞recv() 调用慢很多吗?
【问题讨论】:
-
这可能是您实现的所有细节。你试过了吗?
-
当没有数据要连续读取时,你会怎么做?永远循环?或者使用 select 或 poll 或 epoll ?不管是阻塞还是非阻塞,都需要以某种方式等待数据。
-
是的,正如@Troy 所说,这样你就可以实现主动等待——这意味着当没有什么要读的时候,处理器不会留情。
标签: c sockets nonblocking recv posix-select