In Linux, è possibile per me di aprire un socket e passare il socket a un altro processo? Se sì, puoi dirmi dove posso trovare un esempio?Posso aprire un socket e passarlo a un altro processo in Linux
Grazie.
In Linux, è possibile per me di aprire un socket e passare il socket a un altro processo? Se sì, puoi dirmi dove posso trovare un esempio?Posso aprire un socket e passarlo a un altro processo in Linux
Grazie.
Sì, è possibile, utilizzando sendmsg()
con SCM_RIGHTS da un processo all'altro:
SCM_RIGHTS
- Inviare o ricevere un insieme di descrittori di file aperti da un altro processo . La parte dati contiene un array intero dei descrittori di file. I descrittori di file passato si comportano come se sono stati creati condup(2)
.
http://linux.die.net/man/7/unix
Questo non è l'uso tipico però. Più comune è quando un processo eredita i socket dal suo genitore (dopo un fork()
). Eventuali handle di file (inclusi socket) non chiusi saranno disponibili per il processo figlio. Quindi il processo figlio eredita i socket dei genitori.
Un processo server in ascolto per le connessioni è chiamato un demone. Questo di solito si biforca su ogni nuova connessione, generando un processo per gestire ogni nuova richiesta. Un esempio tipico del daemon è qui:
http://www.steve.org.uk/Reference/Unix/faq_8.html#SEC88
Scorrere nullo process()
.
a meno che non vogliono sborsare un nuovo processo per ogni richiesta, ma basta passare la richiesta a una serie di lavoratori . – magiconair
Sembra specifico per AF_UNIX. Questo può essere fatto per i socket TCP? –
@AdrianRatnapala: no, non è possibile inviare una presa (o handle di file) su TCP su un'altra macchina, devono rimanere all'interno dello stesso kernel. Quindi il canale su cui si comunica deve essere AF_UNIX, ma il gestore di file che si trasferisce può ovviamente essere un socket TCP. – Zarat
possibile duplicato del [Posso condividere un descrittore di file a un altro processo su linux o sono locali al processo?] (Http://stackoverflow.com/questions/2358684/can-i-share-a-file- descrittore-per-altro-processo-on-linux-o-sono-che-local-to-t) – Gilles