我使用以下命令连接到NodeJs中的套接字服务器:
client = net.createConnection()
Run Code Online (Sandbox Code Playgroud)
如何才能正确断开与服务器的连接?
我试过client.end()甚至client.destroy()
但是当我使用netstat检查连接状态时,它显示连接处于FIN_WAIT2状态.
如何完全关闭并破坏连接?
我在OS X 10.11.6上并尝试运行一个通常8008在启动时侦听UDP端口的程序.
此程序通常还会在其操作期间生成几个辅助子进程,但该端口由父进程绑定.
不幸的是,退出程序时,即使程序(父级+子级)不再存在,有时端口仍保持打开状态.
当发生这种情况时,如果我再次尝试运行该程序,它自然会失败并出现EADDRINUSE错误,在这些情况下无论我尝试什么,我发现的唯一解决方案是重启机器.
我很难相信我不能在没有重启的情况下释放端口.
这是我到目前为止运行的一些诊断(我运行和运行所有这些sudo):
查找使用端口的进程8008有lsof:
$ lsof -i -n -P | grep UDP | grep 8008
Run Code Online (Sandbox Code Playgroud)
但令人惊讶的是,没有任何结果.
但是,我有更多运气netstat:
$ netstat -tulnvp udp | grep 8008
udp4 0 0 *.8008 *.* 196724 9216 47205 0
Run Code Online (Sandbox Code Playgroud)
所以,端口确实是绑定的,罪魁祸首是pid 47205,但是:
$ ps aux | grep 47205
Run Code Online (Sandbox Code Playgroud)
不归还任何东西.对于PID 47206和47207(最确定的是分配给孩子们的PID)也是如此.我还尝试过grep(程序名称,路径等)的其他变体.
我还寻找任何流程报告47205作为其父级:
$ ps -axo pid,ppid,command | grep 47205
Run Code Online (Sandbox Code Playgroud)
所以孩子们的过程也显然已经死了.
无法做kill任何事情,我尝试了SIGHUP …