2008-12-07 13 views
5

Creo un socket TCP sin preocuparme por el número de puerto para enlazar con [socket.sin_port = 0]. Sin embargo, más adelante si quiero imprimir el número de puerto del cliente, ¿cómo hago eso? La aplicación C del cliente (en Linux) crea muchos clientes que se conectan al servidor. Para depurar problemas, capturo el tráfico en etéreo. Pensé en imprimir el número de puerto en los registros mientras surge el problema, por lo que el filtrado en etéreo se vuelve fácil.Determinación del número de puerto TCP al que se ató el cliente

Cualquier ayuda sería apreciada.

-Prabhu

Respuesta

10

Uso del getsockname() para obtener la dirección de un conector y el puerto después de una conexión exitosa.

Editar: nombre del método correcto. ¡A veces no puedo copiar una palabra simple de una ventana a otra!

2

Creo que Darron significaba getsockname(). Esto es lo que desea si necesita determinar el número de puerto en el lado del cliente (el lado que llama al connect()) programáticamente. En el lado del servidor (el lado que llama al bind()), usaría getpeername() para obtener la misma información del socket conectado.

Sin embargo, si está depurando y no puede cambiar el código, entonces termina usando cosas como la utilidad netstat o sockstat dependiendo del sistema operativo. No estoy seguro de qué utilidades están disponibles bajo Linux (o incluso su paquete particular) pero comenzaría con man sockstat. Si está instalado, puede ejecutarlo desde cualquier lado y ver qué puntos finales se han asignado a qué procesos. Combine esto con grep y generalmente puede averiguar qué dirección filtrar en Ethereal. ¡Buena suerte!

0
lsof -p <process id> | grep TCP 
Cuestiones relacionadas