Ciao a tutti, vi scrivo ancora per chiedervi aiuto sul programma che sto cercando di fare. In breve, ciò che devo fare è un programma (sia lato server che lato client), che permetta al client di scaricare file dal server, o caricarne dei suoi o ottenere una lista dei file, tutto con server e client concorrenti.
Ora la parte di get, put e list l'ho sviluppata e funziona. Quando sono andato a fare la fork sono nati dei problemi.
In pratica il server crea una socket UDP su una porta specificata e aspetta dal client l'azione da svolgere. Una volta ricevuta crea un secondo socket UDP, invia al client il numero di porta di questo secondo socket e poi forka per far svolgere l'azione scelta al figlio (al quale è assegnato il secondo socket), infine controlla se ha zombie da chiudere con waitpid e torna in ascolto.
Il client, invece, crea un socket UDP per comunicare con il server, chiede all'utente l'azione da svolgere e la invia al server, in caso di get o put chiede all'utente il nome del file, riceve dal server la porta del socket del figlio, e crea una seconda socket con quei dati, dopo ciò forka e comunica con il server per svolgere l'azione scelta dall'utente. Infine chiude il figlio, elimina gli zombie e torna in attesa dell'utente.
Ora il mio problema è che non riesco ad assegnare al server figlio una porta random, se metto:
cclntddrss.sin_port = 0;
o
cclntddrss.sin_port = htons(0);

Mi assegna proprio la porta zero. Se assegno una porta io ho comunque il problema per gli altri processi figli.

Il sistema operativo è Mac OS X, se volete vi posto il codice dei socket.

Grazie.