我使用了以下遗留代码:非阻塞套接字,选择进行超时,读取(2)和写入(2)。 现在它偶尔因选择/ 1024 fd限制而失败。所以我需要替换选择。
似乎RCVTIMEO和SNDTIMEO也可以检查超时但是它们适用于阻塞模式,并且它对从非阻塞变为阻塞的影响太大。
那么还有其他最佳做法来检查非阻止套接字的超时(没有选择)吗?或者我必须得到一些计时器/ nanosleep来解决这个问题?
答案 0 :(得分:4)
poll()
本质上是使用select()
的替代品,但没有1024文件描述符限制。您将不得不稍微更改代码以创建struct pollfd
结构的数组,而不是使用fd_set
s,但代码的整体结构不应该更改。
答案 1 :(得分:3)
答案 2 :(得分:2)
poll()系统调用将超时,并且没有固定的文件描述符限制。如果你真的有1000个开放描述符,你可能会更好地服务于epoll(),它使用起来更复杂但具有更好的缩放特性。