Salve.
Ho un quesito da porvi. Sto riprendendo in questo periodo l'utilizzo delle socket in C in ambiente Linux (in verità, era un argomento che non avevo mai approfondito più di tanto).

Guardando qualche semplice esempio tcp di client e server in cui il server è semplicemente in attesa su una porta e il client si collega ad esso per inviare un semplice messaggio, ho notato che il client non fa altro che invocare la funzione socket(...) per ottenere una socket e richiamare la funzione connect(...), a cui, tra le varie cose, va passata una struttura sockaddr_in in cui vanno specificate informazioni quali l'indirizzo e la porta del server. Direte voi, nulla di strano. Va be'... volevo solo capire qualche piccola cosina.
1) Innanzitutto, una volta chiamata la funzione connect si può considerare la connessione già effettivamente instaurata? (ovvero, è stato fatto l'handshaking tcp?)
2) Dato che il numero di porta sul client viene scelto a caso, c'è modo di rilevare da programma client (e magari anche da programma server) qual è il numero di porta utilizzato dal client? :master:
3) Se sul client volessi scegliere io un particolare numero di porta locale dalla quale collegarsi al server, come dovrei fare?

Grazie


P.S. Se ritenete necessario che io riporti il codice degli esempi che avevo visto, cerco di ricopiarlo.