Некий процесс запущен с правами root'а. Требуется осуществить запись в socket (AF_INET) не родственного ему процесса.
Возможно ли такое в POSIX ?
В std::out можно, может есть методы и на socket'ы ?
# cd /proc/17085/fd
# ls -laF
total 0
dr-x------ 2 root root 0 May 24 18:44 ./
dr-xr-xr-x 7 root root 0 May 23 18:02 ../
lrwx------ 1 root root 64 May 24 18:44 0 -> /dev/console
lrwx------ 1 root root 64 May 24 18:44 1 -> /dev/console
lrwx------ 1 root root 64 May 24 18:44 2 -> /dev/console
lrwx------ 1 root root 64 May 24 18:44 3 -> socket:[91079]
lrwx------ 1 root root 64 May 24 18:44 4 -> socket:[91080]
# echo qq > 1
# echo qq > 3
-bash: 3: No such device or address
Re: Есть ли способ писать в socket другого процесса ?
Здравствуйте, smithx, Вы писали:
S>Некий процесс запущен с правами root'а. Требуется осуществить запись в socket (AF_INET) не родственного ему процесса. S>Возможно ли такое в POSIX ? S>В std::out можно, может есть методы и на socket'ы ?
А как это возможно для std:out? Может быть процесс всё-таки родственный?
Откуда же его [независимый суд] взять, если в нем такие же как мы? (c) VladD2
Re: Есть ли способ писать в socket другого процесса ?
Здравствуйте, smithx, Вы писали:
S>stackoverflow: S>
S>In order to pass sockets between existing processes you need to use sendmsg — Or libancillary which abstracts the whole thing.
In order to pass sockets between existing processes: для передачи дескрипторов между процессами. Посредством sendmsg (через unix domain socket) процесс действительно может отдать открытый им дескриптор другому (неродственному) процессу. Но для этого он сам должен проявить активность.
Вроде, не совсем то, чего вы добиваетесь.
Re[3]: Есть ли способ писать в socket другого процесса ?
Да, совершенно верно, мне нужно самому, зная PID и handlе, получить как бы аналог результата dup, чтобы иметь возможность писать в этот handle (socket) в моем процессе. Но это единственное, что мне удалось найти (в Google и у Стивенса).
Re[4]: Есть ли способ писать в socket другого процесса ?
Здравствуйте, smithx, Вы писали:
S>Да, совершенно верно, мне нужно самому, зная PID и handlе, получить как бы аналог результата dup, чтобы иметь возможность писать в этот handle (socket) в моем процессе. Но это единственное, что мне удалось найти (в Google и у Стивенса).
Хм. Я почти уверен, что это не сработает, но что, если попробовать просто использовать имеющийся хендл сокета (если что, я понимаю слово "хендл" как int, возвращенный вызовом socket(); )? Если же это не сработает — то я практически уверен, что в принципе не должно быть вызовов, которые позволяли бы получить не предусмотренный приложением-владельцем-сокета контроль над сокетом. Это было бы крайне странно со стороны разработчиков стандарта.
Re[2]: Есть ли способ писать в socket другого процесса ?