web-dev-qa-db-ja.com

NodeJでTCPソケットから切断する方法

次のコマンドを使用して、NodeJのソケットサーバーに接続します。

_client = net.createConnection()
_

サーバーから適切に切断するにはどうすればよいですか?

client.end()client.destroy()を試しました

しかし、netstatを使用して接続ステータスを確認すると、接続がFIN_WAIT2状態にあることが示されます。

接続を完全に閉じて破棄するにはどうすればよいですか?

26
mgamer

net.createConnection()はSocketオブジェクトを返します。 client.destroy()はあなたがやりたいことです。

ソース: http://nodejs.org/docs/latest/api/net.html#socket.destroy

24
JP Richardson

これはデフォルトのTCP接続終了シーケンス、

enter image description here

client.end()を呼び出すことにより、ノードjsはFINパケットをサーバーに送信し、サーバーはクライアントにFINパケットで応答してソケット終了を受け入れます。

Nodejsのドキュメントでは、_socket.end_が行うことは、

ソケットを半分閉じます。つまり、FINパケットを送信します。サーバーはまだデータを送信する可能性があります。

FINパケットを受信すると、クライアントからサーバーへの接続が自動的に閉じられ、socket.on('close', .. )が起動され、ACKが返送されます。

そのため、サーバーとクライアントの両方に同意することで接続が終了するため、サーバーは接続を閉じる前に必要なデータを送信できます。

ただし、_socket.destroy_を呼び出すと、FINパケットを強制的に受信せずにクライアント接続が破棄されるため、可能であれば回避することをお勧めします。

参照:

9
Janith

GNU/Linuxにnodejsバージョン11.15.0をインストールしています。この構成でtelnetのようなクライアントを切断する唯一の方法は、

_socket.destroy()
_

socketの他のメソッドはもはや存在しません(例:close()またはdisconnect()); closeまたはendイベントの発行も機能しません。

0
bubbakk