如何在 Linux 上以预定的时间单位自动终止空闲的 tcp 连接?

How to automatically kill idle tcp connections after a pre-determined unit of time on Linux?

提问人:Troy Hamilton 提问时间:7/25/2023 更新时间:7/25/2023 访问量:89

问:

我正在尝试用 C 编写一个服务器,它使用一个名为 epoll() 的函数来处理连接,我想在空闲套接字上实现超时,这样我就可以防止一堆空闲套接字占用资源,但我不想使用 timerfd() 编写一堆复杂的超时代码。我知道在 Linux 上可以配置网络流量设置,我想知道是否有办法让操作系统可以在 15 秒不活动后终止空闲的 tcp 连接。我知道它会对其他使用 TCP 的程序产生影响,但我只打算让这个程序在我的 linux 机器上运行。

有没有办法让内核(或任何控制 TCP 流量的东西)在空闲一段时间后终止 tcp 连接?

C Linux TCP epoll netfilter

评论

0赞 Andrew Henle 7/25/2023
我只打算让这个程序在我的 linux 机器上运行。你确定吗?你是否必须进入这个系统?您将如何管理 Web 服务器本身?“步行/驾驶/飞到系统控制台进行每一个小的更改”并不是一件容易的事情。ssh
0赞 Troy Hamilton 7/25/2023
@AndrewHenle它将在我的实验室中,显然它不会是唯一的程序,它将是唯一使用TCP的程序。
2赞 Shawn 7/25/2023
对 epoll 设置超时,使其每隔几秒钟唤醒一次,然后关闭在过去 15 秒或任何时间内未收到任何数据的连接。
0赞 Shawn 7/25/2023
如果您想变得非常聪明,请根据上次活动时间戳中最空闲的连接计算超时。
0赞 Paul Sanders 7/25/2023
我们在谈论多少个插座?

答:

0赞 Steffen Ullrich 7/25/2023 #1

拥有这样的功能需要资源来实现和维护。我不认为在现实世界中需要对系统上的每个 TCP 套接字进行全局空闲超时。因此,我认为这没有实现。应用程序可以轻松实现自己的超时处理,并且在这里也更加灵活,例如每个应用程序的不同超时,套接字上应用程序协议的每个状态(如标头与正文),具体取决于负载、打开的套接字数量......