出力を切り替えることができる「IPリレーデバイス」にTCPメッセージを送信する小さなコマンドを作成しました。
printf "setstate,1:1,1\r" | nc ip.ip.ip.ip port
時にはこれが実際にうまく機能することがあります。 printfはLinuxとMacの両方で動作するので、netcatで何かをする必要があると思いました。 netcatで-vを使用すると、正しい実行回数が向上することがわかりましたが、非常に退屈な解決策のように見えました。
後で1秒のタイムアウトを追加するnc -iオプションが見つかりました。このオプションはまだエラー(LinuxまたはOSX上)を引き起こしていませんが、実行時間を短縮しますが、それでも100%クリーンな修正ではありません。
これマニュアルページ実際にはncコマンドをパイプできることを示していますが、考えられる競合条件については言及しません。
これが予想される動作ですか?この問題を解決するためのきれいな方法はありますか? (例:「--接続が完了したときにのみ送信」)または実際に競合状態であることを確認できますか?
ベストアンサー1
アクティブな接続があるかどうかを確認できます。
nc -v <HOST> <PORT> </dev/null; echo $?
上記のコマンドが値を返すと、接続は成功し、0
メッセージprintf
を送信できます。それ以外の場合(値は1
)、接続が拒否されたかタイムアウトしたことがわかります。