-1

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

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

我了解 tcp keep alive 包不是数据,而是标头。我在我的 tcpdump 中看到,内核在收到 keep alive 包后发回 tcp keep alive ACK。我的目标是在保持活动到达时保持连接打开(类似于我服务器中的重置计时器,我的服务器可以在没有 tcp 真实数据的情况下关闭连接)

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

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

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

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

4

1 回答 1

1

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

您必须在应用程序协议中实现心跳,然后您可以停止使用 TCP keepalive。

于 2019-06-03T21:49:37.863 回答