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()?
