我想在不使用线程的情况下处理多个客户端,所以我已经阅读了select()但我找不到有关它可以处理多少个套接字的任何信息,我认为它的默认值是64,为了增加这个限制,我必须做一些调整,这是正确的吗?什么是我必须做的调整?
答案 0 :(得分:1)
我猜这个数字实际上是Winsock默认值为64。你可以通过编写一些调用Socket.Select()
的代码来增加{{1}来轻松验证这个问题。实例,直到它失败(*)。
如果您可以有效地更改托管代码中的限制,我会感到惊讶,因为在编译时通过覆盖正在编译的非托管代码中的#define来确定限制。由于您无法重新编译Socket
课程,因此这表示您无法更改限制。
请注意,无论如何,所有这一切都没有实际意义。如果您正在编写托管代码,那么我们没有理由使用Socket
,并且每个理由都使用Socket.Select()
类提供的几个良好的异步API之一。最简单的方法之一是将Socket
实例包装在Socket
中,并使用NetworkStream
和ReadAsync()
方法执行I / O.
就此而言,即使在Winsock中也没有理由使用WriteAsync()
函数,因为Winsock对IOCP(重叠I / O)的支持效率更高,并且没有任何特定的这样的限制。
(*)编辑:所以,我实际测试了这个并且在16373个套接字的数量非常高的情况下失败了。因此,基于快速和肮脏的测试,您可以成功地执行16372个套接字。不过,我不会这样做。