SDK.TXT 20SEP94 このファイルは、NLM開発者のみを対象としています。ユーザ情報は含まれ ていません。 TCPIP.NLMのバージョンMには、BSDソケットAPIおよびTLI APIに新しいオプション が追加されています(バージョンMは、TCP188Jに含まれています)。 BSDソケットAPIでのKeepAliveオプション ------------------------------------- BSDソケットアプリケーションプログラミングインタフェースを使用する アプリケーションは、TCP KeepAliveタイマの使用をトグルでき、setsockopt 関数を使ってタイマの値を設定できます。 デフォルトでは、TCPIP.NLMは、BSDソケットAPIを使用する接続上にKeepAlive を送信しません。 setsockopt setsockopt関数は、ソケット操作のパラメータを設定します。 構文 #include #include setsockopt( int s, int level, int optname, char *optval, int optlen); s (Input) パラメータが設定されるソケットのソケットファイルハンド ルを識別します。 level (Input) SOL_SOCKET optname (Input) SO_KEEPALIVE optval (Input) オプションの値を示します。SO_KEEPALIVEオプションの 値は整数で、タイムアウト値を分で示します。値がゼロの 場合は、KeepAliveタイマは実行できません。値が1から4 までの場合は、タイムアウトの値は2時間に設定されます。    以前は、この値はKeepAliveのトグルをオン(value != 0) またはオフ(optval == 0)にするためだけに使われました。 TLI APIでのKeepAliveオプション ------------------------------ TLIアプリケーションプログラミングインタフェースを使用するアプリケーション は、TCP KeepAliveタイマの使用をトグルでき、t_optmgmt関数を使ってタイマ の値を設定できます。 デフォルトでは、TCPIP.NLMは、TLI APIを使用する接続上にKeepAlivesを2時間 おきに送信します。以前のバージョンでは、TCP for NetWareは、t_optmgmt関数を サポートしていませんでした。 構文 #include int t_optmgmt ( int fh, struct t_optmgmt *req, struct t_optmgmt *ret ) fh (Input) バウンドトランスポートエンドポイントを識別します。 req (Input) プロトコルオプションを含む構造を示します。 ret (Output) オプションとフラグの値を受信します。 注意 reqおよびret引き数が示すt_optmgmt構造には、次のメンバが含まれます: struct netbuf opt; long flags; optフィールドはプロトコルオプションを識別し、flagsフィールドはこれらのオプ ションによる動作を指定します。 KeepAliveタイマを変更するためには、T_NEGOTIATEフラグを設定してください。 T_CHECKおよびT_DEFAULTフラグはサポートされていません。 netbuf構造には、次のメンバが含まれます。: unsigned int maxlen; unsigned int len; char *buf; maxlen (Input) reqの引き数に対しては意味をもちません。 (Output) オプションバッファの最大サイズを指定します。 len (Input) オプションのバイト数を指定します。 (Output) 返されたバイト数を指定します。 buf (Input) オプションバッファを示します。下に定義された t_opthdrを参照してください。 (Output) オプションが配置されるバッファを示します。 詳しくは次に定義するt_opthdrを参照してください。 次の構造は、アプリケーションで定義します。 t_opthdr構造は、処理されるオプションを定義し、次に示す構造と同じです。: struct t_opthdr { unsigned long len; unsigned long level; unsigned long name; unsigned long status; struct t_kpalive kp_val; }; len t_opthdrの長さ level INET_TCP 次の定義が必要です: #define INET_TCP 0x06 name TCP_KEEPALIVE 次の定義が必要です: #define TCP_KEEPALIVE 0x08 status T_SUCCESSまたはT_FAILUREは、処理のステータスを示します。 kp_val t_kpalive構造は、KeepAliveタイマのステータスとタイマの 間隔を定義します。構造は次のようになります。: struct t_kpalive { long kp_onoff; long kp_timeout; } kp_onoff 0 - KeepAlivesを使用可にします。 1 - KeepAlivesを使用不可にします。 kp_timeout タイマの値を分で示します。値が5より小さい場合は、 タイムアウトの値は2時間に設定されます。 TCP/IPの動作 ------------ KeepAliveタイマの期限が一度切れると、TCP/IPはKeepAliveパケットをTCPピアに 送信します。TCPピアが反応した場合は、タイマはリセットされます。接続の往復 にかかる予想時間内にTCPピアが反応しない場合は、TCP/IPはKeepAliveパケットを 再送信します。TCP/IPは、その標準再試行アルゴリズムに従って再試行します。 指数のbackoffアルゴリズムが、再送のためのラウンドトリップ時間の増加を概算 することに使われます。つまり、KeepAliveタイマの期限が切れた後も、TCP/IPが その標準再試行を終えるまで接続は閉じないということになります。