LINUX.ORG.RU

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


0

0

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

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

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

anonymous
()

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

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

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

Спасибо мил человек, это уже что то.

anonymous
()

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

Die-Hard ★★★★★
()

man 2 fcntl

anonymous
()

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

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

Dead ★★★★
()

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

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