谁使用TCP端口?

dij*_*tra 6 erlang tcp

我的应用程序中的一个gen_servers调用gen_tcp:listen(Port,[{active,true}]).第一次运行单元测试时,它返回{ok,Socket},但第二次运行相同的单元测试时,它返回{error,eaddrinuse},但是

lsof -i TCP
Run Code Online (Sandbox Code Playgroud)

没有回报.此外,当相同的unit_test在另一台机器(WinXP)上运行两次时,它按预期工作(即,两次都返回{ok,Socket}).因此,我的gen_server显然会释放端口,但Erlang不知何故不知道.

那么,我怎么能弄清楚Erlang认为谁使用这个地址呢?

ant*_*oft 9

这是因为在Unix系统上实现TCP的细节 - 当打开一个套接字进行监听时,在监听进程关闭后它将在CLOSE_WAIT状态下保持几分钟不可用.

从上面的Lukas评论:你可以使用reuseaddr标志来gen_tcp:听听避免这个

  • 哦,我喜欢堆栈溢出:-D (2认同)