【问题标题】:vxworks 6.3 active sockets maxs out at 255?vxworks 6.3 活动套接字的最大值为 255?
【发布时间】:2013-10-29 06:12:09
【问题描述】:

我有一个在 vxworks 6.3 上运行的 LPD 服务器。客户端应用程序(我无法控制)每十分之一秒向我发送一个 LPQ 查询。 235 次请求后,客户端在尝试连接时收到 RST。一段时间后,设备将再次接受一些查询(大约 300 个),直到它再次开始发送 RST。

我已经确认是 TCP 堆栈导致了 RST。我注意到了一些事情。

1) 如果我更改正在运行的其他应用程序的数量,我可以稍微更改将接受的套接字数量。例如,我释放了 4 个套接字,从而将接受的数字从 235 更改为 239。 2)如果我向 lpr(端口 515)和另一个端口(例如端口 80)发送请求,则在 RST 开始发生之前接受的连接总数保持在 235 不变。 3)有很多sockets坐在TIME_WAIT。
4)我有一个模拟版本的客户端。如果我将客户端减慢到每四分之一秒一个请求,则服务器不会拒绝连接。 5) 如果我减慢服务器的响应速度,我不会拒绝任何连接。

所以我的理论是 VxWorks 可以在给定时间消耗一些共享资源(我的猜测是套接字句柄的总数)。我也猜测这个数字最高为 255。

有谁知道我如何让 VxWorks 接受更多连接,并在关闭时将它们留在 TIME_WAIT 中?我查看了内核配置并更改了所有看起来很可能的值,但我无法更改数字。

我们知道我们可以设置 SO_LINGER 但这不是一个可接受的解决方案。但是,这确实可以防止客户端连接被拒绝。我们还尝试更改 SO_LINGER 的超时值。这在 VxWorks 中似乎不受支持。它可以打开或关闭。

谢谢! 盖尔

【问题讨论】:

    标签: sockets reset vxworks


    【解决方案1】:

    对我来说,听起来您正在为每个 LPQ 查询建立新连接,并且在查询完成后您并没有关闭连接。在我看来,正确的做法是接受一个 TCP 连接,然后使用它来获取所有 LPQ 查询,但这可能需要对客户端应用程序进行修改。为避免客户端修改,您应该在每次 LPQ 查询后关闭 TCP 连接。

    此外,您可以通过调整#define NUM_FILES config.h(或 configall.h 或其中一个文件)来设置 vxworks 中打开的最大 FD 数,但如果您有 FD 泄漏,这只会推迟错误,你可能会这样做。

    【讨论】:

    • 嗨,克里斯,感谢您的建议。我们实际上没有泄漏;当我们完成它们时,所有连接都将关闭。套接字将在...1 分钟后离开 TIME_WAIT。 TCP 堆栈保持套接字打开,等待延迟的网络流量。我确实尝试过更改 NUM_FILES,但这似乎并没有改变行为。幸运的是,我们说服了客户更改他们的应用程序以减少查询频率,这使我们能够避免整个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-10-29
    • 2023-03-17
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多