Salve a tutti. Sto realizzando un'applicazione client/server in C utilizzanto le API Berkeley. Il server è realizzato con forking, ovvero ogni volta che un client si connette, crea un processo child che gestisce la connessione con il client e quindi il socket.
Il problema è il seguente: ogni volta che che un client si connette, la accept() nel processo padre restituisce un socket_descriptor sempre uguale, ovvero sempre lo stesso numero.
Probabilmente mi sbagliavo, ma ritenevo che il descrittore del socket fosse univoco, cioè quando il client A si connette, viene aperto un socket con id 5, quando si connette il client B un nuovo socket avrà id 6...e così via.
Quello che intendevo realizzare era la possiblità, da parte di un processo (padre o figlio che fosse) di poter selezionare il socket su cui scrivere selezionando il relativo socket_descriptor opportunamente memorizzato. Quindi, nell'esempio di cui sopra, il processo che gestiva la connessione del client B potesse scrivere sul socket con sock_descptr 5, ovvero sul socket aperto fra client A e server (per inviare dati al client A, ad esempio).
Invece, stando così le cose, ad esempio, i socket gestiti da due processi figli A e B hanno lo stesso socket_descriptor.
Al 99% credo che questo tipo di approccio sia sbagliato. Come posso fare? Suppongo di dover implementare un sistema di scambio messagi fra i vari processi child e il processo padre...vero?