LINUX.ORG.RU

Есть ли сигнал, уведомляющий о разорванном соединении?

 , ,


2

3

Здравствуйте.

Есть один одна прокси-програмка (из fcgi в tcp). Сначала она слушает fcgi-сокет, устанавливает на нем соединение, подключается по TCP к другому сокету и читает из него в блокирующем режиме.

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

Можно ли поймать сигнал о разрыве fcgi-соединения или еще как-то решить проблему, не прибегая к таймаутам и epoll'ам?

★★★★★

е5сли та сторона закрыла соединение корректно, то ты поймешь это по вычитанному нулю. или по событию из poll ... как его там...

если порвался провод где-то между узлами - то нет. будет висеть, пока тебе какой-то из роутеров не скажет «пшёлканах»

таймаутынашевсе.

anonymous
()
Ответ на: комментарий от POLTER

Файрфоксу пофиг. Через пару минут разрывает даже keepalive. Хром еще не проверял. nginx вроде как правильно подкрутил

makoven ★★★★★
() автор топика
Ответ на: комментарий от joy4eg

у меня от асинхронщины травма после nodejs. Стоит в одном месте заюзать, как повсюду вырастают колбэки и машины состояний )

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Это вам, батенька, epoll уже тогда. А Я предлагаю select() с таймаутом в том месте, где есть read или write, и ничего более.

joy4eg ★★★★★
()
Ответ на: комментарий от makoven

Или даже poll:

int poll(struct pollfd *fds, nfds_t nfds, int timeout);


POLLRDHUP (since Linux 2.6.17)
Stream socket peer closed connection, or shut down writing half of connection.

joy4eg ★★★★★
()
Ответ на: комментарий от joy4eg

так и поступлю если ничего проще не придумаю)

makoven ★★★★★
() автор топика

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

read вернёт управление, если соединение закрыто. Если read продолжает висеть, значит у тебя что-то с сетью не так.

Legioner ★★★★★
()
Ответ на: комментарий от makoven

Ну тогда select (и его друзья), потоки или read с таймаутом.

Legioner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.