Recentemente ho postato qui chiedendo quali sono gli svantaggi di un processo del server associato a una porta assegnata dinamicamente. Questo approccio si è verificato perché xinetd, che ha avviato il processo del server, alloca STDIN e STDOUT come canale di comunicazione del server per il client e volevamo che il server usasse un socket bidirezionale. Le risposte (e il nostro team operativo) mi hanno convinto ad abbandonare questo approccio.
Ho bisogno di un processo daemon per monitorare una porta designata e un fork di server simultanei. Il processo del server è scritto utilizzando un'infrastruttura I / O basata su socket. Abbiamo sviluppato un processo server che può essere lanciato da xinetd. La prima cosa da fare è associare un numero di porta assegnato dinamicamente, inviare il numero di porta al client su STDOUT e quindi ascoltare sul socket per il client connect () - a quel punto è bene andare con il socket basata sull'infrastruttura I / O.
Il nostro team operativo ha bloccato l'utilizzo di porte dinamiche per motivi di sicurezza ( vedi link ). Sto cercando un modo alternativo per un client di connettersi a un server generato dinamicamente e comunicare tramite socket. La soluzione più semplice sarebbe qualcosa di identico sotto molti aspetti a xinetd , ma che, invece di allocare STDIN / STDOUT come connessione del server al client, passerebbe il socket che è stato assegnato quando il daemon accetta () ed ha effettuato la connessione, sul server. Presumibilmente, poiché il numero del socket non sarebbe prevedibile, il daemon dovrebbe anche passare il numero come argomento della riga di comando.
Ho scritto un demone del genere in Perl, ma esito a rotolare i miei perché sono certo che (x) inetd è molto meglio "indurito" di quello che avrei potuto facilmente ottenere.
Quindi questo è il problema, e quello che io penso sia la soluzione più semplice. Mi piacerebbe sentire soluzioni alternative, o anche se in effetti xinetd può essere configurato per passare un socket come ho descritto.