LINUX.ORG.RU

[нубство] как передать tcp-сокет между процессами?


0

0

К примеру, есть уже открытое соединение к IMAP-серверу, как его передать другому процессу, что-то с ним сделать, и потом вернуть обратно первому процессу?

Нагуглилось что-то про STREAMS, которые в линуксе даже в ядро не попали, и рипнулись ещё в девяностых, и про передачу дескрипторов через UNIX-сокет, но пока поллитры разобраться не хватило.

Желательно с примерами на перл.
Ну или с объяснением, почему такими извращениями страдать не надо.

Спасибо.

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

Не верно. Можно. Когда-то сталкивался с подобной задачей, но всё обошлось тем что оно просто не потребовалось. Не знаю как у тебя, но в моём случае это был костыль для работы с старым приложением, в котором чёрт ногу сломит.

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

> Не верно. Можно.

И как же?

Дескриптор - это циферка, показывающая на номер записи в «таблице» процесса. Это цифра, специфичная для конкретного процесса. Всё, что ты можешь сделать для «передачи» - это форкнуться и предоставить чайлду копии нужных дескрипторов.

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

Если тебе нужно шарить подобные данные - используй треды


Треды не богоугодны. Так писали и Танненбаум, и Реймонд.

braindamaged
() автор топика

ну на крайняк если процессы совсем независимые, используйте message queue ну или именованные каналы..

irishka
()
Ответ на: комментарий от braindamaged

Drain Bamage, а где конструктивные аргументы?

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

Да, верно. Дескриптор копируется в дочернее приложение, которое может с ним работать.
Вот и выход.

tia
()

Ты же всё уже нашёл:

про передачу дескрипторов через UNIX-сокет

man 7 unix, пример в конце, google:SCM_RIGHTS, «третья строка» cpansearch.perl.org/src/SAMPO/Socket...0.03/passfd.c

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

> что же тогда FIFO - такое?!

Pipe

FIFO - это named pipe. Теперь переведи с английского 'named pipe' и убейся об стену.

anonymous
()

Вы уверены, что нужно передавать именно сам дескриптор и без этого ну никак не обойтись. Зачем это нужно?
На мой взгляд лучше сделать только одно, приложение которое эксклюзивно будет работать с соединением.
Второе приложение может обмениваться данными с первым, используя любое на ваш выбор из средств взаимодействия процессов в unix. (shm, pipes, sockets и пр.)

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