我很确定这是节点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或防火墙。
答案 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
,一切都很顺利。