LINUX.ORG.RU

Сообщения etwas

 

tcp сервер, select и таймаут

Неблокирующий ТСР сервер на select`е. Подключаются писатель и читатель. Сервер принимает от писателя структуру с intами, сохраняет и отдаёт читателю при его подключении. Если писатель не подключается за время t, поля структуры становятся 0xffffffff и читатель различает таймаут писателя.

Если использовать один listen_fd на оба типа, то подключение читателя сбросит таймаут и не узнать о недоступности писателя.

Если listen_fd разные и в readfds внести listen_fd только писателя, то select не обработает подключение читателя. А если в fd_set включить listen_fd обоих, то подключение читателя опять обнулит таймаут.

На ум приходит fork(), где родитель при подключении читателя отправляет SIGUSR1 порождённому, а тот, принявший структуру от писателя или установивший её поля в 0xffffffff при таймауте, передаёт структуру родителю через pipe().

Как обработать ситуацию одним процессом, по возможности без тредов?

 , ,

etwas
()

RSS подписка на новые темы