A quanto ho capito, questo è ciò che accade quando un client effettua una richiesta di connessione:
- Il server sarà associato a un determinato numero di porta. Il numero di porta è sempre associato a un processo di ascolto. Poiché solo il server è in attesa di connessioni in entrata, non è necessario eseguire il bind sul lato client
- Il server continuerà ad ascoltare su quel numero di porta.
- Il cliente invierà una
connect()
richiesta. - Il server accetterà la richiesta utilizzando
accept()
. Non appena il server accetta la richiesta del client, il kernel alloca ulteriormente un numero di porta casuale per il serversend()
ereceive()
, poiché lo stesso numero di porta sul server non può essere utilizzato per l'invio e l'ascolto, e la porta precedente è ancora ascoltando nuove connessioni
Alla luce di tutto ciò, come fa il server a scoprire su quale porta sta ricevendo il client? So che il client invierà segmenti TCP con una porta di origine e una porta di destinazione, quindi il server utilizzerà la porta di origine di quel segmento come porta di destinazione, ma quale funzione chiama il server per scoprire quella porta? È vero accept()
?