エラー 60: 同じローカルポートで TCP 接続を開いたり閉じたりするとエラーが発生する

更新しました Dec 18, 2023

使用製品

ソフトウェア

  • LabVIEW

問題

リアルタイムコントローラを使用しており、特定のローカルポートでTCP接続を開いています。接続を閉じた後、すぐに同じローカルポートで再度開くと、TCP接続を開く関数からエラー60が発生します。TCP関数を使用しているコードは、シンプルにすると下図のようになっています。
 

エラーコード60が TCP Open Connection VI発生

考えられる理由:
LabVIEW: 指定されたポートまたはネットワークアドレスは現在使用中です。使用可能なポートまたはネットワークアドレスを選択してください。


 

このエラーが発生するのはなぜですか?そして、この問題を修正するにはどうすればよいですか?

解決策

この状態は、VxWorksやLinux RTを含む、さまざまなオペレーティングシステム(OS)で一般的に実装されているTCP/IPスタックで予想される動作です。この動作はTCP TIME-WAIT状態と呼ばれ、接続を閉じた後、約1分間ブロックされるようにポート番号を設定します。この動作により、新しい接続がポートで開かれる前に、ネットワーク内に残っている接続のパケットを受信するかタイムアウトさせることができます。これにより、古い接続のメッセージが新しい接続で受信されるのを防ぎます。
 

一般に、OSにローカルポート番号を選択させるのが最善です。特定のローカルポートを使用する必要がある場合は、TIME-WAIT状態を完了させるために、接続を閉じてから再び開くまでに数分間待機する必要があります。Linux RTターゲット(cRIO-906xや903xなど)の場合、同じTCPポートをすぐに再利用する必要がある場合は、次のトークンを追加してlvrt.confファイルを変更できます。
 

SocketSetReuseAddr = True


lvrt.confファイルは、/files/etc/natinst/share/のフォルダに保存されています。