select()可以处理的最大套接字数是多少?

时间:2014-11-21 22:14:53

标签: c# sockets

我想在不使用线程的情况下处理多个客户端,所以我已经阅读了select()但我找不到有关它可以处理多少个套接字的任何信息,我认为它的默认值是64,为了增加这个限制,我必须做一些调整,这是正确的吗?什么是我必须做的调整?

1 个答案:

答案 0 :(得分:1)

我猜这个数字实际上是Winsock默认值为64。你可以通过编写一些调用Socket.Select()的代码来增加{{1}来轻松验证这个问题。实例,直到它失败(*)。

如果您可以有效地更改托管代码中的限制,我会感到惊讶,因为在编译时通过覆盖正在编译的非托管代码中的#define来确定限制。由于您无法重新编译Socket课程,因此这表示您无法更改限制。

请注意,无论如何,所有这一切都没有实际意义。如果您正在编写托管代码,那么我们没有理由使用Socket,并且每个理由都使用Socket.Select()类提供的几个良好的异步API之一。最简单的方法之一是将Socket实例包装在Socket中,并使用NetworkStreamReadAsync()方法执行I / O.

就此而言,即使在Winsock中也没有理由使用WriteAsync()函数,因为Winsock对IOCP(重叠I / O)的支持效率更高,并且没有任何特定的这样的限制。

(*)编辑:所以,我实际测试了这个并且在16373个套接字的数量非常高的情况下失败了。因此,基于快速和肮脏的测试,您可以成功地执行16372个套接字。不过,我不会这样做。