2008-12-07 15 views
5

Tworzę gniazdo TCP bez zawracania sobie głowy numerem portu, który zostanie powiązany z [socket.sin_port = 0]. Jednak później, jeśli chcę wydrukować numer portu klienta, jak mam to zrobić? Aplikacja kliencka C (w systemie Linux) tworzy wielu klientów, którzy łączą się z serwerem. Do debugowania problemów przechwytuję ruch w eterycznym. Pomyślałem o wydrukowaniu numeru portu w dziennikach, gdy pojawia się problem, aby filtrowanie na eterycznym stało się łatwe.Określanie numeru portu TCP, z którym klient został powiązany.

Każda pomoc zostanie doceniona.

-Prabhu

Odpowiedz

10

Użyj getsockname() zadzwonić, aby uzyskać adres gniazda i port po udanym związku.

Edytuj: poprawna nazwa metody. Czasami nie mogę skopiować prostego słowa z jednego okna do drugiego!

2

Uważam, że Darron oznaczał getsockname(). To jest to, czego potrzebujesz, jeśli chcesz określić numer portu po stronie klienta (strona wywołująca connect()) programowo. Po stronie serwera (strona wywołująca bind()) użyjesz getpeername(), aby uzyskać te same informacje z podłączonego gniazda.

Jednakże, jeśli debugujesz i nie możesz zmienić kodu, to kończysz na używaniu takich rzeczy jak narzędzie netstat lub sockstat w zależności od systemu operacyjnego. Nie jestem pewien, jakie narzędzia są dostępne pod Linuksem (lub nawet konkretny pakiet), ale zacznę od man sockstat. Jeśli jest zainstalowany, możesz uruchomić go z dowolnej strony i sprawdzić, które punkty końcowe zostały przypisane do wybranych procesów. Połącz to z grep i zazwyczaj możesz dowiedzieć się, który adres będzie filtrowany w Ethereal. Powodzenia!

0
lsof -p <process id> | grep TCP 
Powiązane problemy