1

vxworks で個々のソケット記述子にキープアライブを設定する方法はありますか? 私は、setsockopt関数の「SOL_TCP」オプションがLinuxでそのような恩恵をもたらすといういくつかの文書を読みました。そのような機能は VxWorks でも利用できますか? その場合は、インクルードする必要があるインクルード ファイルは何か、そのようなオプションの使用方法など、関連する詳細を提供してください。

4

2 に答える 2

1

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_INITTCPTV_KEEP_IDLETCPTV_KEEPCNT、およびTCPTV_KEEPINTVLファイル target/h/net/tcp_timer.h で定義されています。

于 2011-01-07T15:28:25.653 に答える