172 похожих чатов

Кто-Нибудь сталкивался с проблемой, как для std::net::TCPListener повесить обработчик SIGTERM

без перевода его в неблокирующий режим?

12 ответов

10 просмотров

Может взять сырой fd у него и в обработчике сигнала сделать то что нужно для этого fd?

Sergey-Levitin Автор вопроса
J. A. R. Kotlien
Может взять сырой fd у него и в обработчике сигнал...

Вопрос в том, как прервать блокирующий accept

Sergey Levitin
Вопрос в том, как прервать блокирующий accept

По идее если грохнуть fd TCP сокета через сискол, то должен как-то отреагировать.

sigterm прервёт работу accept, он завершится с кодом EINTR

Sergey-Levitin Автор вопроса
Денис
sigterm прервёт работу accept, он завершится с код...

Хм, да, работает, Странно, я вчера словил проблему, когда docker не может киллнуть процесс через SIGTERM и оно ждет до SIGKILL

Sergey Levitin
Хм, да, работает, Странно, я вчера словил проблему...

хех, растовский .accept при получении EINTR пробует дальше

Sergey-Levitin Автор вопроса
Денис
хех, растовский .accept при получении EINTR пробуе...

Проблема в другом. Процесс с PID=1 должен явно определять хендлеры сигналов, в отличии от всех других, которые просто прибиваются.

Sergey Levitin
Проблема в другом. Процесс с PID=1 должен явно опр...

И в этом тоже -- попробовал локально, accept из стандартной библиотеки молча съедает eintr и приступает к следующей попытке

Sergey Levitin
Проблема в другом. Процесс с PID=1 должен явно опр...

но можно использовать крейт https://docs.rs/socket2/0.4.2/socket2/ (там есть конверсия туда-обратно для стандартных примитивов), там accept не обрабатывает никак EINTR

Денис
но можно использовать крейт https://docs.rs/socket...

вот пример https://gist.github.com/mexus/29b580d1a553028744dd318b78b5e3bc (на плейграунде всё равно нет нужных крейтов)

Sergey-Levitin Автор вопроса
Денис
И в этом тоже -- попробовал локально, accept из ст...

Я использую listener.incoming() stream и он прервывается по SIGINT / SIGTERM

Sergey Levitin
Я использую listener.incoming() stream и он прервы...

он же под капотом один фиг accept делает, который обрабатывает EINTR: https://github.com/rust-lang/rust/blob/master/library/std/src/net/tcp.rs#L1024 щас проверил локально, всё так и есть, incoming при получении сигнала (если, конечно, на сигнале висит обработчик, а не дефолтное поведение "кишками наружу")

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Есть предложения, как подобное можно упростить?
Hemul GM
12
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
just use free version ?? pycharm has a free version
Fan / Ac
9
Карта сайта