我用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的服务器或接收方保持活动状态,如何使其保持打开状态)
最佳答案
不,据我所知这是不可能的。
您将必须在应用程序协议中实现检测信号,然后才能停止使用TCP Keepalive。
关于c - 如何检测TCP保持事件数据包并保持连接打开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56434706/