【发布时间】:2014-01-08 12:31:38
【问题描述】:
据我所知,select 只支持不超过 1024 个套接字。但是一个进程可以拥有 65535 个套接字,这意味着大多数套接字数都大于 1024,所以我有三个问题:
第一季度。如果将大于 1024 的套接字号传递给 FD_SET() 会发生什么?
Q2。如果将套接字号都大于1024的fd_set传递给select()会发生什么?
Q3。在内核为 2.6.8、x86 64bit 的 Linux Fedora 上,Q1 和 Q2 会抛出异常吗?
【问题讨论】:
-
恕我直言,如果你有那么多套接字,你真的应该考虑使用 epoll 而不是 select,它的扩展性比 select 好。
-
您可以使用一些event loop 库,例如libevent 或libev
-
在我的例子中,它返回了错误的“ready to read” fd,并且我的(单线程程序最终在 read() 上无限期阻塞
标签: c++ linux sockets select glibc