кто использует порт TCP? - PullRequest
       22

кто использует порт TCP?

6 голосов
/ 16 ноября 2011

Один из gen_servers в моем приложении вызывает gen_tcp: listen (Port, [{active, true}]) . При первом запуске модульного теста возвращается {ok, Socket}, но при втором запуске того же модульного теста возвращается {error, eaddrinuse}, но

lsof -i TCP

ничего не возвращает. Кроме того, когда один и тот же unit_test запускается дважды на другой машине (WinXP), он работает как положено (то есть возвращает {ok, Socket} оба раза). Поэтому мой gen_server явно освобождает порт, но Эрланг почему-то этого не знает.

Итак, как я могу выяснить, кто, по мнению Эрланга, использует этот адрес?

Ответы [ 2 ]

9 голосов
/ 16 ноября 2011

Это связано с деталями реализации TCP в системах Unix - когда сокет открыт для прослушивания, он останется недоступным в течение нескольких минут в состоянии CLOSE_WAIT после завершения процесса прослушивания.

Из комментария Лукаса выше: вы можете использовать флаг reuseaddr для gen_tcp: слушайте, чтобы избежать этого

0 голосов
/ 16 ноября 2011

если вы работаете в Windows, вы можете использовать утилиту netstat, чтобы узнать, какой процесс имеет какой порт открыт:

http://commandwindows.com/netstat.htm

netstat -a -b -v должно помочь

Linux netstat также поддерживает отображение пользователя, но для этого вам нужны права root.

...