首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查非阻塞套接字超时而不选择

如何检查非阻塞套接字超时而不选择
EN

Stack Overflow用户
提问于 2012-06-29 03:06:18
回答 3查看 1.6K关注 0票数 1

我使用了一些遗留代码:非阻塞套接字,选择作为超时,读取(2)和(2)。现在,由于select/1024 fd限制,它偶尔失败。所以我需要替换选择。

RCVTIMEO和SNDTIMEO似乎也可以检查超时,但它们适用于阻塞模式,而且影响太大,无法从非阻塞模式更改为阻塞模式。

那么,是否还有其他最佳实践来检查非阻塞套接字(没有选择)的超时?或者我得找个定时器/奈米睡眠来解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-29 03:15:56

poll()本质上是对使用select()的替代,但是没有1024文件描述符的限制。您必须稍微修改代码,以创建一个struct pollfd结构数组,而不是使用fd_set结构,但是代码的总体结构不应该改变。

票数 4
EN

Stack Overflow用户

发布于 2012-06-29 03:21:29

epoll是一个比select更好的解决方案,它不限于1024个描述符。

实际上,您可以使用利贝特利别夫来处理低级异步套接字I/O,它们是异步I/O的所谓“最佳实践”。

票数 3
EN

Stack Overflow用户

发布于 2012-06-29 03:19:42

轮询()系统调用需要超时,并且没有文件描述符的固定限制。如果您确实有1000个开放描述符,那么epoll()可能会为您提供更好的服务,epoll()使用起来更复杂,但具有更好的缩放特性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11255541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档