vxworks で個々のソケット記述子にキープアライブを設定する方法はありますか? 私は、setsockopt関数の「SOL_TCP」オプションがLinuxでそのような恩恵をもたらすといういくつかの文書を読みました。そのような機能は VxWorks でも利用できますか? その場合は、インクルードする必要があるインクルード ファイルは何か、そのようなオプションの使用方法など、関連する詳細を提供してください。
2 に答える
VxWorksの「Library Reference」マニュアルから(ダウンロードできます):
ストリーム ソケットのオプション
次のセクションでは、ストリーム (TCP) ソケットで使用できるソケット オプションについて説明します。
SO_KEEPALIVE -- 切断された接続の検出
SO_KEEPALIVE オプションを指定して、トランスポート プロトコル (TCP) にタイマーを開始させ、切断された接続を検出します。
setsockopt (sock, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof (optval));
これにより、アプリケーションが無効な接続でハングするのを防ぎます。このオプションの optval の値は、1 (オン) または 0 (オフ) のいずれかの整数 (int 型) です。接続の整合性は、ピア ノードからの応答を強制するために、タイマーによってトリガーされる長さ 0 の TCP セグメントを送信することによって検証されます。KEEPALIVEセグメントの送信を繰り返した後にピアが応答しない場合、接続が切断され、すべてのプロトコル データ構造が再利用され、接続上でスリープ状態にあるプロセスがETIMEDOUTエラーで起動されます。
ETIMEDOUTタイムアウトは、2 つの方法で発生する可能性があります。接続がまだ確立されていない場合、KEEPALIVEタイマーは TCPTV_KEEP_INIT のアイドリング後に期限切れになります。接続が確立されると、 TCPTV_KEEP_IDLE のトラフィックがないときにKEEPALIVEタイマーが開始されます。KEEPALIVEセグメントTCPTV_KEEPCNTを間隔TCPTV_KEEPINTVLで送信した後、ピアから応答が受信されない場合、TCP は接続が無効であると想定します。パラメータTCPTV_KEEP_INIT、TCPTV_KEEP_IDLE、TCPTV_KEEPCNT、およびTCPTV_KEEPINTVLファイル target/h/net/tcp_timer.h で定義されています。