2008-12-07 19 views
5

Creare un socket TCP senza preoccuparsi del numero di porta da associare a [socket.sin_port = 0]. Comunque più avanti se voglio stampare il numero di porta del client come faccio? L'applicazione client C (su Linux) crea molti client che si connettono al server. Per eseguire il debug dei problemi, acquisisco il traffico su etereo. Ho pensato di stampare il numero di porta nei log mentre si presenta il problema in modo che il filtraggio su etereo diventa facile.Determinazione del numero di porta TCP a cui è stato associato il client

Qualsiasi aiuto sarebbe apprezzato.

-Prabhu

risposta

10

Utilizzare la getsockname() chiamata per ottenere l'indirizzo e la porta presa dopo una connessione riuscita.

Modifica: nome del metodo corretto. A volte non riesco a copiare una semplice parola da una finestra all'altra!

2

Credo che Darron significasse getsockname(). Questo è ciò che si desidera se è necessario determinare il numero di porta sul lato client (il lato chiamante connect()) a livello di programmazione. Sul lato server (chiamata lato bind()), si utilizzerà getpeername() per ottenere le stesse informazioni dal socket collegato.

Tuttavia, se si esegue il debug e non è possibile modificare il codice, si finisce per utilizzare cose come l'utilità netstat o sockstat a seconda del sistema operativo. Non sono sicuro di quali utilità siano disponibili su Linux (o anche sul tuo particolare pacchetto), ma inizierei con man sockstat. Se è installato, è possibile eseguirlo da entrambi i lati e vedere quali endpoint sono stati assegnati a quali processi. Combinalo con grep e di solito puoi capire quale indirizzo filtrare in Ethereal. In bocca al lupo!

0
lsof -p <process id> | grep TCP