2

これはノード v0.10.18 のバグであると確信していますが、私のマシンに汚染が発生しており、それを解消する方法がわかりません。

この単純な tcp サーバー (コーヒー) スクリプトがあります。

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

を使用して実行し、 +をcoffee z.coffee押して中断すると、EADDRINUSE 例外のため、同じポートで再度実行できません。このプロセスは、異なるポートで繰り返され、同じ結果になります。CtrlC

同様の問題に関する他の回答を認識していますが、マシン(osx ml)を再起動してもポートがブロックされたままになるため、解決できません。明らかに、ps -A | grep node何も示していません。

スタックしたポートを再び解放するにはどうすればよいですか?

編集

以下、コメントの抜粋です。ノードはデフォルトで SO_REUSEADDR を使用しているように見えるため、特にポートが 1 時間以上スタックしているため、TIME_WAIT が問題になることはありません。root としての netstat も lsof も、ポートを使用して何も表示せず、複数回の再起動も、重要なプログラム以外のすべてのプログラムの強制終了も、問題の解決に役立ちませんでした。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 に答える