2009-11-24 61 views
4

比方说我有一个要监听的连接特定的TCP端口上的应用程序。在同一个端口上可以处理的连接数是否有理论上的限制?什么限制了TCP端口的连接数量?

还是有仅根据操作系统和其他属性上的实际限制?

我在网上搜索也没有找到确凿的答案。

感谢

回答

5

如果进程限制(如ulimit命令所示)为1024,并且您尚未关闭STDIN,STDOUT和STDERR和100个文件描述符将被诸如数据库连接和其他文件句柄的项使用, 921开放连接可用于同时处理。这假设所有连接都是并行处理的。这些文件描述符将在每个连接关闭后重新使用。最终的结果是,如果您的应用程序正确处理文件描述符,则应用程序启动和关闭之间的连接总数是无限的。

+0

我更感兴趣的窗口。 – ckv 2009-11-24 05:37:01

+0

在Windows中,应用相同的主体,但最大限制实际上取决于可用系统资源的数量。 Windows上的套接字是句柄,它们是共享系统资源。 – jfawcett 2009-11-24 05:44:17

+0

好的谢谢,所以理论上没有这样的限制,但实际上可能有 – ckv 2009-11-24 05:51:12

2

在UNIX(而不是Windows),接受的套接字占用文件描述符,所以限制是允许打开的文件描述符的数量。打开的文件描述符的数量是每个进程的限制,同时具有硬限制和软限制。有关更多信息,请参阅ulimit(2)。

请注意,如果您关闭套接字,你释放文件描述符,因此它可以再次使用了。 ulimit限制仅适用于同时打开的文件描述符的数量。

具体回答你的问题,没有对插座端口可以接受的数量是有限的,只有在这个过程侦听的端口可以同时打开数。如果存在限制,那么在端口80上监听的Web服务器将不得不更频繁地重新启动。