如何释放卡住的服务器端口?
我相当肯定,这是节点v0.10.18中的一个bug,但是它对我的机器造成了污染,我不知道该如何清除。
我有这个简单的TCP服务器(咖啡)脚本:
net = require 'net' server = net.createServer -> server.listen 'localhost:4545'
当我使用coffee z.coffee
运行它,然后按Ctrl + C来中断它时,由于EADDRINUSEexception,我无法再在同一端口上运行它。 该过程在不同的端口上重复,结果相同。
我知道关于类似问题的其他答案,但他们无法解决我的问题,因为即使重新启动机器(OSX ml)仍然离开端口被阻止。 显然, ps -A | grep node
ps -A | grep node
什么也没有。
我能做些什么来再次释放卡住的端口?
编辑
以下是以下评论的摘要。 看来节点使用SO_REUSEADDR是默认的,所以TIME_WAIT不应该成为问题,特别是因为端口已经停留了一个多小时。 netstat和lsof都不能显示任何使用这个端口的东西,既不需要多次重新启动,也不会杀死除了基本程序以外的所有程序,从而帮助解决问题。 没有VPN或防火墙。
https://github.com/joyent/node/blob/3d4c663ee68326990e0732a4aa76445688e1064e/lib/net.js#L1159
你传递无效的参数到server.listen
。 它将您的string解释为unix域套接字文件系统path。
这个程序工作正常,可以立即杀害和重新启动。
net = require "net" server = net.createServer -> console.log "connection" server.listen 1337, "127.0.0.1"
将正确的parameter passing给server.listen
,一切正常。