【问题标题】:how can I determine the maximum value of 'backlog' that is allowed on the current system?如何确定当前系统允许的“积压”最大值?
【发布时间】:2011-06-18 11:54:42
【问题描述】:

我正在使用 ServerSocket,但我没有看到/找到 backloglimit 是什么。文档对此只字未提:

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 可能太多了。那么有没有办法确定我可以使用的 backlog 的最大值?

在 c++ 中您似乎可以使用 SOMAXCONN - Java 是否存在类似的东西?

【问题讨论】:

  • 如果您使用的是默认限制 50 之类的东西,那么您有一个严重的问题。你能想出一个增加它的好理由吗?

标签: java sockets


【解决方案1】:

如果有,它将取决于系统:对于Windows

backlog参数有限制 (默默地)到一个合理的值 由底层服务决定 提供者。非法值被替换 最接近的法定价值。有 没有标准的规定来找出 实际积压值。

Linux 的表述略有不同,但您需要通过 sysctl 接口(或者可能是 /proc)。

无论如何,您似乎需要执行一些系统特定的代码。

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

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 2020-12-10
    • 2013-01-20
    • 2013-04-22
    • 1970-01-01
    • 2010-12-10
    • 2011-03-18
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多