我用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的服务器或接收方保持活动状态,如何使其保持打开状态)
答案 0 :(得分:1)
不,据我所知这是不可能的。
您将必须在应用程序协议中实现检测信号,然后才能停止使用TCP keepalive。