次のコマンドを使用して、NodeJのソケットサーバーに接続します。
_client = net.createConnection()
_
サーバーから適切に切断するにはどうすればよいですか?
client.end()
とclient.destroy()
を試しました
しかし、netstatを使用して接続ステータスを確認すると、接続がFIN_WAIT2状態にあることが示されます。
接続を完全に閉じて破棄するにはどうすればよいですか?
net.createConnection()
はSocketオブジェクトを返します。 client.destroy()
はあなたがやりたいことです。
ソース: http://nodejs.org/docs/latest/api/net.html#socket.destroy
これはデフォルトのTCP接続終了シーケンス、
client.end()
を呼び出すことにより、ノードjsはFINパケットをサーバーに送信し、サーバーはクライアントにFINパケットで応答してソケット終了を受け入れます。
Nodejsのドキュメントでは、_socket.end
_が行うことは、
ソケットを半分閉じます。つまり、FINパケットを送信します。サーバーはまだデータを送信する可能性があります。
FINパケットを受信すると、クライアントからサーバーへの接続が自動的に閉じられ、socket.on('close', .. )
が起動され、ACKが返送されます。
そのため、サーバーとクライアントの両方に同意することで接続が終了するため、サーバーは接続を閉じる前に必要なデータを送信できます。
ただし、_socket.destroy
_を呼び出すと、FINパケットを強制的に受信せずにクライアント接続が破棄されるため、可能であれば回避することをお勧めします。
参照:
GNU/Linuxにnodejsバージョン11.15.0をインストールしています。この構成でtelnetのようなクライアントを切断する唯一の方法は、
_socket.destroy()
_
socket
の他のメソッドはもはや存在しません(例:close()
またはdisconnect()
); close
またはend
イベントの発行も機能しません。