Мне нужно использовать evconnlistener_disable () перед fork ()? - PullRequest
0 голосов
/ 14 июля 2020

Я сейчас разрабатываю серверное приложение с libevent.

Иногда серверу требуется выполнить c некоторую внешнюю команду (например, fork(), затем exec()). Меня беспокоит то, что сразу после fork() и родитель, и потомок могут эффективно прослушивать, и у ребенка может быть шанс «принять» новое входящее соединение до exec() s, это может вызвать родительский ( серверное приложение), чтобы потерять входящий запрос.

Нужно ли мне evconnlistener_disable() до fork() и evconnlistener_enable() после fork()?

1 Ответ

1 голос
/ 14 июля 2020

Есть несколько способов сделать это, в зависимости от того, к чему именно вы стремитесь. Вы можете использовать wait () для родительского элемента, чтобы эффективно приостановить его, пока дочерний элемент не закончит работу. Или сразу закройте дескриптор файла слушателя в дочернем. Или, если вас беспокоят только входящие запросы во время выполнения exe c (), вы можете установить флаг close-on-exe c в дескрипторе файла (FD_CLOEXE C).

Я бы подумал, что отключение слушателя перед fork () и последующее его повторное включение снова включит его и для ребенка.

...