У меня есть системный .socket в сочетании с @ .service. Сокет содержит «Accept = yes», чтобы принять TCP-соединение от клиента по указанному порту, после чего создается экземпляр @ .service, который выполняет мою серверную программу для обработки TCP-соединения. В настоящее время я тестирую с одним клиентом (программное обеспечение Windows), подключающимся к серверу (linux C++).Системный разъем с «Accept = true» имеет длительную задержку перед запуском службы.
Проблема заключается в том, что при первом попытке подключения к компьютеру соединение с TCP успешно завершено, но существует большая задержка (5-10 секунд), прежде чем systemd запускает связанный с ним. Любые последующие соединения сразу запустит @ .service, . Если не принят пакет TCP RST. Если принят пакет TCP RST, следующее соединение снова задерживается на 5-10 секунд до запуска @. Службы, и цикл повторяется.
Файл .socket очень прост. Для части [Socket] он действительно просто указывает порт ListenStream и Accept = true.
Любые идеи, что может вызвать эту задержку?
Изменение уровня журнала определенно помогает узнать больше информации, касающейся времени. Что странно, я изменил свой код для того, чтобы клиент потребовал «готовый» пакет tcp с сервера, прежде чем инициировать соединение SSL (в попытке учесть задержку systemd при запуске сервера), и с тех пор, как я не был способный воссоздать эту задержку. Но ваша информация помогла подтвердить, как systemd работает с сокетом и поможет мне отлаживать, если я смогу заставить это повториться, так что спасибо. – schumacher574
Почему это принятый ответ? Это даже не ответ. – LtWorf