LINUX.ORG.RU

Нужен совет


0

0

В общем ситуация такая,

есть сервер (это отдельный процесс).

Он постоянно заблокирован на accept().

Нужно реализовать управление им через именованый pipe.

Вопрос, можно ли как-то разрулить?

Скажем так, если бы это был не accept, а ,к примеру, recv, то я б применил select на поступление данных в сокет и в пайп.

А как можно применить select к accept?

В общем суть в том, что нужно слушать одновременно и сокет и пайп.

Хочется надеяться, что вы разберетесь в моей писанине :)

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

★★★★

Re: Нужен совет

Sorry for English.

You may use poll/select: after listen(), select it for readability,
and once selected, call accept. Be very careful though. It is
possible to get an asynch error in between, which will block accept()
forever. The correct sequence, once select has returned, is
-- switch to a nonblocking mode
-- accept
-- check for error and reac accordingly
-- switch back to blocking
This could be nicely wrapped in a function.

vnp ()

Re: Нужен совет

Действительно select срабатывает после listen на чтение.

Вот только не совсем понял зачем после этого переводить сокет в неблокирующий режим?

Или select может сработать не только при поступлении запроса на подключение?

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