有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何确定当前系统上允许的“backlog”的最大值?

我正在玩ServerSocket,但我没有看到/找到积压工作的限制是什么。文件中没有提到这一点:

http://download.oracle.com/javase/6/docs/api/java/net/ServerSocket.html#ServerSocket(int,int)

我的代码如下:

serverSocket = ServerSocketChannel.open();
serverSocket.socket().bind(null, 10000);

但我认为如果一个系统没有足够的RAM,10000可能太多了。那么,有没有一种方法可以确定我可以使用的积压工作的最大值

看起来,在C++中,你可以使用SOMAXCONN——java也有类似的东西吗?


共 (1) 个答案

  1. # 1 楼答案

    如果有,它将依赖于系统:对于Windows

    The backlog parameter is limited (silently) to a reasonable value as determined by the underlying service provider. Illegal values are replaced by the nearest legal value. There is no standard provision to find out the actual backlog value.

    Linux的状态稍有不同,但需要通过sysctl接口(或者可能是/proc)

    在任何情况下,您都需要执行一些特定于系统的代码

    我相信,如果指定的值“太大”,大多数实现只会使用它们的最大值,所以这可能不是应用程序的问题