|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Eugene Grosbein 2:5006/1 04 Apr 2000 14:46:32 To : All Subject : проблема с accept() -------------------------------------------------------------------------------- Привет! Слышал, что в BSD ядро автоматически перезапускает системный вызов после его прерывания сигналом. Во FreeBSD это как-то регулируется? Кажется, есть какой-то sysctl, запрещающий перезапуск. Проблема вот в чем. Демон висит на accept(), принял - форкнулся, и снова на accept(). Приходит сигнал - обработчик выставляет флаг, accept() возвращает EINTR, проверяется флаг, реакция на сигнал, и снова на accept(). Это все работает до первого входящего соединения. После отработки первой же итерации accept-fork-accept, по приходу сигнала флаг выставляется (обработчик пишет в syslog об этом), а accept() не выходит с EINTR. И даже когда приходит следующее соединение, оно отрабатывается нормально. А сигнала как-будто и не было. Как заставить accept() прерываться? FreeBSD 3.4, STREAM-сокет домена UNIX, демон собран с pthreads. Сам демон потоков не использует, просто слинкован с библиотекой, требующей pthreads. Эту библиотека используется после fork(). Eugene --- slrn/0.9.6.2 (FreeBSD) * Origin: SVZ-Service (2:5006/1@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/26093792eaa15.html, оценка из 5, голосов 10
|