select() 可以处理的最大套接字数是多少
本文关键字:套接字 多少 处理 select | 更新日期: 2023-09-27 18:31:39
我想在不使用线程的情况下处理多个客户端,所以我已经阅读了 select() 但我找不到任何关于它可以处理多少套接字的信息,我认为它的默认值是 64,为了增加该限制,我必须做一些调整,对吗? 我必须做的调整是什么?
Socket
Socket.Select()
,直到它失败 (*),即可轻松验证这一点。
如果您能够有效地更改托管代码中的限制,我会感到惊讶,因为限制是在编译时通过重写正在编译的非托管代码中的 #define 来确定的。由于您无法选择重新编译 Socket
类,因此这表明您将无法更改限制。
请注意,无论如何,所有这些都是没有意义的。如果您正在编写托管代码,则实际上没有理由使用 Socket.Select()
,并且完全没有理由使用 Socket
类提供的几个好的异步 API 之一。最简单的方法之一是将Socket
实例包装在NetworkStream
中,并使用 ReadAsync()
和 WriteAsync()
方法执行 I/O。
就此而言,即使在Winsock中,也没有理由使用select()
函数,因为Winsock对IOCP(重叠I/O)的支持效率要高得多,并且没有任何这样的特定限制。
(*)编辑:所以,我实际上对此进行了测试,它以惊人的16373个插槽数失败。因此,基于快速而肮脏的测试,您可以成功执行16372套接字。不过,我不会那样做。