LINUX.ORG.RU

Отдать дескриптор сокета другому процессу


0

0

Есть сервер tcp/ip который слушает определенный порт. Хочеться по
установлению нового соединения запускать независимый процес,вернее запускать другой бинарник, который будет обрабатывать данное соединение. Подскажите как сделать,или близкие альтернативы.
Про fork знаю, не нравится, это так же должно компилится и под Win32.

anonymous

Re: Re: Re: Re: Отдать дескриптор сокета другому процессу

redir построен на fork.
А Робачавского читал, помню что execv замещает текущий процес, в вот как туда дескриптор открытого соединения передать, не знаю, разве что,
через командную строку...

anonymous
()

Re: Отдать дескриптор сокета другому процессу

Ну командная строка тоже вариант, но красивее будет передать этот дескриптор в качестве stdin и stdout для порожденного процеса.

После выполнения fork закрываем stdin и stdout {close(0); close(1);} после этого копируем наш дескритор при помощи dup 2 раза. После этого выполняем exec нужного бинарника и теперь все что он пишет на stdout будет попадать в сокет и наоборот - читаемое с stdin будет читаться с сокета. xinetd так и делает.

kpanic ★★
()

Re: Отдать дескриптор сокета другому процессу

> Про fork знаю, не нравится
Тогда - никак.

Die-Hard ★★★★★
()

Re: Отдать дескриптор сокета другому процессу

man 2 fcntl

anonymous
()

Re: Отдать дескриптор сокета другому процессу

Угу stdin, stdout то что тебе нужно, просто принимающий процесс должен знать об этом,

Хотя помоему все это сурогат ;-)

Dead ★★★★
()

Re: Отдать дескриптор сокета другому процессу

Ну и на фига же тебе нужно самому писать такой сервер, если все уже сделано в xinetd? Пользуйся, и не задумывайся.

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