LINGER 構造体 (winsock.h)
残留構造では、データの送信がキューに登録され、ソケットで closesocket 関数が呼び出されたときにソケットがどのように動作するかを指定する、特定のソケットに関する情報が保持されます。
typedef struct linger {
u_short l_onoff;
u_short l_linger;
} LINGER, *PLINGER, *LPLINGER;
l_onoff
種類: u_short
キューに登録されたデータの送信を有効にするために、 closesocket 関数の呼び出し後、指定した時間ソケットを開いたままにするかどうかを指定します。 このメンバーには、次のいずれかの値を指定できます。
値 | 意味 |
---|---|
|
ソケットは開いたままではありません。 これは、optname パラメーターを SO_DONTLINGER に設定して setsockopt 関数が呼び出され、optval パラメーターが 0 の場合に設定される値です。
この値は、optname パラメーターを SO_LINGER に設定して setsockopt 関数が呼び出され、optval パラメーターで渡される残留構造に l_onoff メンバーが 0 に設定されている場合にも設定されます。 |
|
ソケットは、指定された時間開いたままです。 この値は、optname パラメーターを SO_DONTLINGER に設定して setsockopt 関数が呼び出され、optval パラメーターが 0 以外の場合に設定されます。
この値は、optname パラメーターを SO_LINGER に設定して setsockopt 関数が呼び出され、optval パラメーターで渡される残留構造に l_onoff メンバーが 0 以外の値に設定されている場合にも設定されます。 |
l_linger
種類: u_short
秒単位の残留時間。 このメンバーは、キューに登録されたデータの送信を有効にするために closesocket 関数呼び出し後に開いたままにする期間を指定します。 このメンバーは、残留構造のl_onoff メンバーが 0 以外の値に設定されている場合にのみ適用されます。
この値は、optname パラメーターを SO_LINGER に設定して setsockopt 関数が呼び出された場合に設定されます。 setsockopt 関数に渡される optval パラメーターには、ソケット用に保持される内部残留構造にコピーされる残留構造が含まれている必要があります。
残留構造のl_onoff メンバーは、キューに登録されたデータの送信を有効にするために closesocket 関数呼び出しの後、指定した時間ソケットを開いたままにするかどうかを決定します。 ややわかりにくいのは、このメンバーを次の 2 つの方法で変更できることです。
- optname パラメーターを SO_DONTLINGER に設定して setsockopt 関数を呼び出します。 optval パラメーターは、l_onoff メンバーの変更方法を決定します。
- optname パラメーターを SO_LINGER に設定して setsockopt 関数を呼び出します。 optval パラメーターは、l_onoffメンバーとl_linger メンバーの両方を変更する方法を指定します。
残留構造のl_linger メンバーは、ソケットを開いたままにする必要がある時間 (秒単位) を決定します。 このメンバーは、残留構造のl_onoff メンバーが 0 以外の場合にのみ適用されます。
ソケットを開いたままにするには、アプリケーションで l_onoff メンバーを 0 以外の値に設定し、 l_linger メンバーを目的のタイムアウト (秒単位) に設定する必要があります。 開いたままのソケットを無効にするには、アプリケーションで、残留構造のl_onoff メンバーをゼロに設定するだけで済みます。
アプリケーションが optname パラメーターを SO_DONTLINGER に設定して setsockopt 関数を呼び出して、l_onoff メンバーを 0 以外の値に設定した場合、l_linger メンバーの値は指定されません。 この場合、使用されるタイムアウトは実装に依存します。 (SO_LINGERを有効にすることによって) ソケットに対して以前のタイムアウトが確立されている場合、このタイムアウト値はサービス プロバイダーによって復元される必要があります。
非ブロッキング ソケットで 0 以外のタイムアウトを有効にすることはお勧めしません。
ソケットに関連付けられている残留構造の現在の値を取得するには、optname パラメーターを SO_LINGER に設定して、getsockopt 関数を呼び出すことができます。
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
Header | winsock.h (Winsock2.h を含む) |