как обнаружить TCP, чтобы сохранить живые пакеты и поддерживать соединение открытым - PullRequest
0 голосов
/ 04 июня 2019

Я написал свой собственный сервер с epoll. Когда я отправляю TCP keep live пакеты от клиента к серверу, событие epoll не сработает. Вопрос: я хочу, чтобы мой сервер оставлял соединение открытым, когда сервер получает пакеты tcp keep alive.

Я также пытался просмотреть информацию tcp, но не было обновлений для ее атрибутов, когда сервер получил пакеты поддержки активности.

Я понимаю, что tcp keep alive пакеты - это не данные, а заголовок. Я видел в моем tcpdump, ядро ​​отправило обратно tcp keep alive ACK после получения пакета keep alive. Моя цель состоит в том, чтобы поддерживать соединение открытым при поступлении активности (например, таймер сброса на моем сервере, мой сервер может закрыть соединение без реальных данных TCP)

Я настроил свой клиент на установление соединения и отправку данных (например, «hello world»), а затем отправляю пакеты «keep alive» на сервер.

Мой сервер запущен epoll. Я также также попытался установить свой сервер, чтобы быть неблокирующим.

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

(большинство вопросов, которые я нашел в интернете, относятся к клиентской части, мой вопрос больше касается поддержки сервера или получателя протокола tcp, как его сохранить)

1 Ответ

1 голос
/ 04 июня 2019

Нет, насколько я знаю, это невозможно.

Вам нужно будет реализовать пульс в протоколе приложения, а затем вы можете прекратить использовать поддержку активности TCP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...