LINGER 構造体 (winsock2.h)

残留構造は、送信するデータがキューに入れられ、ソケットで closesocket 関数が呼び出されたときにソケットがどのように動作するかを指定する、特定のソケットに関する情報を保持します。

構文

typedef struct linger {
  u_short l_onoff;
  u_short l_linger;
} LINGER, *PLINGER, *LPLINGER;

メンバー

l_onoff

種類: u_short

キューに入れたデータの送信を有効にするために 、closesocket 関数呼び出し後にソケットを指定した時間開いたままにするかどうかを指定します。 このメンバーには、次のいずれかの値を指定できます。

意味
0
ソケットは開いたままになりません。 これは、optname パラメーターを SO_DONTLINGER に設定して setsockopt 関数が呼び出され、optval パラメーターが 0 の場合に設定される値です。

この値は、optname パラメーターを SO_LINGER に設定して setsockopt 関数が呼び出され、optval パラメーターで渡される残留構造に l_onoff メンバーが 0 に設定されている場合にも設定されます。

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 メンバーを 0 に設定するだけで済みます。

アプリケーションが optname パラメーターを SO_DONTLINGER に設定して setsockopt 関数を呼び出して、l_onoff メンバーを 0 以外の値に設定した場合、l_linger メンバーの値は指定されません。 この場合、使用されるタイムアウトは実装に依存します。 (SO_LINGERを有効にして) ソケットに対して以前のタイムアウトが確立されている場合、このタイムアウト値はサービス プロバイダーによって復元される必要があります。

非ブロッキング ソケットで 0 以外のタイムアウトを有効にすることはお勧めしません。

ソケットに関連付けられている残留構造の現在の値を取得するには、optname パラメーターを SO_LINGER に設定して、getsockopt 関数を呼び出すことができます。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
Header winsock2.h (Winsock2.h を含む)

こちらもご覧ください

正常なシャットダウン、残留オプション、ソケットクロージャ

closesocket

getsockopt

setsockopt