如何释放卡住的服务器端口?

时间:2013-09-12 19:52:18

标签: node.js osx-mountain-lion

我很确定这是节点v0.10.18中的一个错误,但它对我的机器造成了污染,我不知道如何清除。

我有这个简单的tcp服务器(咖啡)脚本:

net = require 'net'
server = net.createServer ->
server.listen 'localhost:4545'

当我使用coffee z.coffee运行它然后按 Ctrl + C 来中断它时,我无法再在相同的端口上运行它EADDRINUSE异常。该过程在不同的端口上重复,结果相同。

我知道关于类似问题的其他答案,但他们无法解决我的问题,因为即使重新启动机器(osx ml)仍然会阻止端口。显然,ps -A | grep node也没有显示任何内容。

我可以做些什么来重新释放卡住的端口?

修改

以下是评论的摘要。似乎节点使用SO_REUSEADDR是默认的,因此TIME_WAIT应该不是问题,特别是因为端口已经卡住超过一个小时。 netstat和lsof都没有显示任何使用端口的东西,既没有多次重启,也没有杀死除了基本程序以外的所有程序都帮助解决问题。没有VPN或防火墙。

1 个答案:

答案 0 :(得分:1)

https://github.com/joyent/node/blob/3d4c663ee68326990e0732a4aa76445688e1064e/lib/net.js#L1159

您将无效参数传递给server.listen。它将您的字符串解释为unix域套接字文件系统路径。

此程序运行正常,可立即杀死并重新启动。

net = require "net"
server = net.createServer ->
  console.log "connection"
server.listen 1337, "127.0.0.1"

将正确的参数传递给server.listen,一切都很顺利。