2

我相当确定这是节点 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 作为 root 都没有使用端口显示任何内容,多次重新启动,也没有杀死除基本程序之外的所有程序都有助于解决问题。没有VPN或防火墙。

4

1 回答 1

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,一切都很好。

于 2013-09-13T02:53:24.397 回答