如何检测TCP保持活动数据包并保持连接打开

时间:2019-06-03 21:22:23

标签: c tcp epoll tcp-keepalive

我用epoll编写了自己的服务器。当我从客户端向服务器发送TCP保持活动包时,epoll事件将不会触发。问:我希望服务器在获得tcp时保持连接保持打开状态。

我也尝试查看tcp信息,但是当服务器保持活动包时,其属性没有更新。

我了解tcp keep alive软件包没有数据而是标头。我在tcpdump中看到,内核在收到keep alive程序包后发回tcp keep alive ACK。我的目标是在保持活动状态时保持连接打开(有点像服务器中的重置计时器,我的服务器可以在没有tcp实际数据的情况下关闭连接)

我将客户端设置为建立连接并发送数据(例如“ hello world”),然后将保持活动的程序包发送到服务器。

我的服务器被epoll触发。我已经尝试将服务器设置为非阻塞状态。

// epoll setting I tested
EPOLLIN | EPOLLOUT | EPOLLRDHUP | EPOLLET

(我在互联网上发现的大多数问题都与客户端有关,我的问题更多地是关于tcp的服务器或接收方保持活动状态,如何使其保持打开状态)

1 个答案:

答案 0 :(得分:1)

不,据我所知这是不可能的。

您将必须在应用程序协议中实现检测信号,然后才能停止使用TCP keepalive。