системный сокет с & quot; Accept = true & quot; имеет долгую задержку до запуска службы

У меня есть системный .socket в паре с @ .service. Сокет содержит «Accept = yes» для принятия TCP-соединения от клиента через указанный порт, после чего создается экземпляр @ .service, который выполняет мою серверную программу для обработки TCP-соединения. В настоящее время я тестирую один клиент (программное обеспечение Windows), подключающийся к серверу (linux c ++).

Моя проблема заключается в том, что при первой попытке клиентского соединения TCP-соединение успешно, но с большой задержкой (5-10 секунд), прежде чем systemd запускает связанный @ .service. Любые последующие подключения запускают @ .service практически сразу, ЕСЛИ не получен пакет TCP RST. Если получен пакет TCP RST, следующее соединение снова с задержкой в ​​5-10 секунд перед запуском @ .service и цикл повторяется.

Мой файл .socket очень прост. Для части [Socket] он просто указывает порт ListenStream и Accept = true.

Есть идеи, что может быть причиной этой задержки?

-1

Решение

Первое, что приходит мне в голову, это то, что самому systemd не хватает процессора, чтобы принять соединение, но, возможно, это не то, чем он является, поскольку вы думаете, что он как-то связан с пакетом TCP RST.

Вы можете изменить уровень журнала для отладки в /etc/systemd/system.conf и получить больше информации о том, когда systemd фактически принимает соединение.

Как это работает, systemd прослушивает сокет в файле .socket и помещает epoll в дескриптор файла. Как только в сокете происходит активность, systemd получает уведомление в своем цикле событий. Затем он принимает соединение и запускает программу, указанную в файле .service.

0

Другие решения


По вопросам рекламы [email protected]