我的应用程序中的一个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认为谁使用这个地址呢?
这是因为在Unix系统上实现TCP的细节 - 当打开一个套接字进行监听时,在监听进程关闭后它将在CLOSE_WAIT状态下保持几分钟不可用.
从上面的Lukas评论:你可以使用reuseaddr标志来gen_tcp:听听避免这个
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |