Libevent: как закрыть все открытые сокеты при выключении?

Я создал простой HTTP-прокси, используя libevent. Его можно отключить, отправив ему сигнал SIGHUP, который перехватывается обработчиком сигнала. Функция выключения вызывает event_base_loopexit, освобождает структуры и другие выделения кучи и завершает работу.

Проблема в том, что SIGHUP перехватывается при открытом соединении. Мне нужно иметь возможность закрыть сокет, в идеале вызывая ту же функцию закрытия, которая вызывается при перехвате события закрытия.

Есть ли правильный или стандартный способ сделать это?

На данный момент единственное, что я могу придумать, это сохранить связанный список подключений и просто перебирать его при выключении, закрывая каждое по очереди.


person SlappyTheFish    schedule 24.01.2014    source источник


Ответы (1)


На данный момент единственное, о чем я могу думать, это сохранить связанный список подключений и просто > повторять его при выключении, закрывая каждое по очереди.

Это то, что вы должны сделать.

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

person nos    schedule 24.01.2014