LPWSPSETSOCKOPT コールバック関数 (ws2spi.h)
LPWSPSetSockOpt 関数はソケット オプションを設定します。
構文
LPWSPSETSOCKOPT Lpwspsetsockopt;
int Lpwspsetsockopt(
[in] SOCKET s,
[in] int level,
[in] int optname,
[in] const char *optval,
[in] int optlen,
[out] LPINT lpErrno
)
{...}
パラメーター
[in] s
ソケットを識別する記述子。
[in] level
オプションが定義されているレベル。サポートされているレベルには 、SOL_SOCKETが含まれます。 詳細については、「 Winsock Annexes」を参照してください。
[in] optname
値を設定するソケット オプション。
[in] optval
要求されたオプションの値が指定されるバッファーへのポインター。
[in] optlen
optval バッファーのサイズ (バイト単位)。
[out] lpErrno
エラー コードへのポインター。
戻り値
エラーが発生しない場合、 LPWSPSetSockOpt は 0 を返します。 それ以外の場合は、 SOCKET_ERROR の値が返され、 lpErrno で特定のエラー コードを使用できます。
エラー コード | 意味 |
---|---|
ネットワーク サブシステムが失敗しました。 | |
optval がプロセス・アドレス・スペースの有効な部分にないか、optlen パラメーターが小さすぎます。 | |
コールバックが進行中の場合、関数が呼び出されます。 | |
Windows ソケット呼び出しのブロックが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。 | |
レベルが無効であるか、optval の情報が無効です。 | |
操作の実行中にキープ アライブ動作によってエラーが検出されたため、接続が切断されました。 | |
オプションが不明であるか、指定されたプロバイダーでサポートされていません。 | |
SO_KEEPALIVEが設定されると、接続がリセットされました。 | |
記述子はソケットではありません。 |
注釈
LPWSPSetSockOpt 関数は、任意の型のソケットに関連付けられているソケット オプションの現在の値を任意の状態で設定します。 オプションは複数のプロトコル レベルで存在できますが、常に最上位のソケット レベルに存在します。 オプションは、ソケットでブロードキャスト メッセージを送信できるかどうかなど、ソケット操作に影響します。
ソケット オプションには、機能または動作を有効または無効にするブール型のオプションと、整数値または構造体を必要とするオプションの 2 種類があります。 Boolean オプションを有効にするには、 optval は 0 以外の整数を指します。 オプションを無効にするには、 optval は 0 に等しい整数を指します。 optlen パラメーターは、ブール値オプションの sizeof (int) と等しい必要があります。 その他のオプションの場合、 optval はオプションの目的の値を含む整数または構造体を指し、 optlen は整数または構造体の長さです。
ソケット オプションの詳細については、「 ソケット オプション」を参照してください。
level = SOL_SOCKET
値 | Type | 説明 |
---|---|---|
SO_BROADCAST | BOOL | ソケットでのブロードキャスト メッセージの送信と受信を有効にします。 |
SO_DEBUG | BOOL | デバッグ情報を記録します。 |
SO_DONTLINGER | BOOL | 予約済み。 |
SO_DONTROUTE | BOOL | 無効なルーティング: インターフェイスに直接送信します。 このソケット オプションの設定は成功しますが、AF_INETソケットでは無視されます。 は、WSAENOPROTOOPT AF_INET6ソケットで失敗します。 このオプションは ATM ソケットではサポートされていません (エラーが発生します)。 |
SO_GROUP_PRIORITY | INT | 予約済み。 |
SO_KEEPALIVE | BOOL | キープアライブを送信します。 ATM ソケットではサポートされていません (エラーが発生します)。 |
SO_LINGER | 構造体の残留 | 未提出のデータが存在する場合は、閉じても残ります。 |
SO_OOBINLINE | BOOL | 通常のデータ ストリームで OOB データを受信します。 |
SO_RCVBUF | INT | 受信用に予約するソケット単位の合計バッファー領域を指定します。 これはSO_MAX_MSG_SIZEとは無関係であり、TCP 受信ウィンドウのサイズに必ずしも対応するとは限りません。 |
SO_REUSEADDR | BOOL | 既に使用されているアドレスにソケットをバインドすることを許可します。 (「 バインド」を参照)。ATM ソケットには適用されません。 |
SO_SNDBUF | INT | 送信用に予約するソケット単位の合計バッファー領域を指定します。 これはSO_MAX_MSG_SIZEとは無関係であり、TCP 送信ウィンドウのサイズに必ずしも対応するとは限りません。 |
PVD_CONFIG | サービス プロバイダー依存 | このオブジェクトは、ソケット s に関連付けられているサービス プロバイダーの構成情報を格納します。 このデータ構造の正確な形式は、サービス プロバイダー固有です。 |
サポートされていないオプションで LPWSPGetSockopt を呼び出すと、lpErrno で WSAENOPROTOOPT のエラー コードが返されます。
-
SO_DEBUG
-
Windows Sockets サービス プロバイダーは、 SO_DEBUG オプションが Windows ソケット SPI クライアントによって設定されている場合、出力デバッグ情報を提供することをお勧めしますが、必須ではありません。 デバッグ情報と形式を生成するためのメカニズムは、この仕様の範囲外です。
-
SO_GROUP_PRIORITY
-
予約済み。
-
Windows ソケット SPI クライアントは、 [SO_KEEPALIVE ソケット] オプションをオンにすることで、TCP/IP プロバイダーが TCP 接続でキープアライブ パケットの使用を有効にすることを要求できます。 Windows ソケット プロバイダーは、キープアライブの使用をサポートする必要はありません。その場合、正確なセマンティクスは実装固有ですが、RFC 1122 のセクション 4.2.3.6: インターネット ホストの要件 — 通信層に準拠する必要があります。 (このリソースは英語でのみ使用できます)。キープアライブの結果として接続が切断された場合、エラー コード WSAENETRESET はソケットで進行中の呼び出しに返され、それ以降の呼び出しは WSAENOTCONN で失敗します。
-
SO_LINGER
-
SO_LINGERは、未送データがソケットでキューに入れられて LPWSPCloseSocket が実行されたときに実行されるアクションを制御します。 SO_LINGER設定が LPWSPCloseSocket のセマンティクスに影響する方法の説明については、「LPWSPCloseSocket」を参照してください。 Windows ソケット SPI クライアントは、optval パラメーターによって指される、次の要素を使用して、必要な動作を設定します。
struct linger { u_short l_onoff; u_short l_linger; }
SO_LINGERを有効にするには、Windows ソケット SPI クライアントで l_onoff を 0 以外の値に設定し、l_lingerを 0 または目的のタイムアウト (秒単位) に設定し、LPWSPSetSockOpt を呼び出す必要があります。 SO_DONTLINGERを有効にするには、つまり、SO_LINGERを無効にするには、l_onoffを 0 に設定し、LPWSPSetSockOpt を呼び出す必要があります。 非ブロッキング ソケットで 0 以外のタイムアウトで SO_LINGER を有効にすることはお勧めしません。 詳細については、「 LPWSPCloseSocket」を参照してください。
SO_LINGERを有効にすると、SO_DONTLINGERも無効になり、その逆も無効になります。 SO_DONTLINGERが無効になっている (つまり、SO_LINGERが有効になっている) 場合、タイムアウト値は指定されていないことに注意してください。 この場合、使用されるタイムアウトは実装に依存します。 ( SO_LINGERを有効にすることによって) ソケットに対して以前のタイムアウトが確立されている場合、このタイムアウト値はサービス プロバイダーによって復元される必要があります。
-
SO_REUSEADDR
-
既定では、ソケットは既に使用されているローカル アドレスにバインドできません (詳細については、「 LPWSPBind」を参照してください)。 ただし、場合によっては、この方法でアドレスを再利用することが望ましい場合があります。 すべての接続はローカル アドレスとリモート アドレスの組み合わせによって一意に識別されるため、リモート アドレスが異なる限り、同じローカル アドレスに 2 つのソケットをバインドしても問題はありません。 ソケット上の LPWSPBind を別のソケットで既に使用されているローカル アドレスにバインドできるようにする必要があることを Windows ソケット プロバイダーに通知するには、LPWSPBind を発行する前に、Windows ソケット SPI クライアントでソケットのSO_REUSEADDR ソケット オプションを設定する必要があります。 オプションは LPWSPBind の時点でのみ解釈されることに注意してください。したがって、既存のアドレスにバインドされていないソケットでオプションを設定することは不要ですが、無害です。 LPWSPBind がこのソケットやその他のソケットに影響を与えない後にオプションを設定またはリセットします。
-
SO_SNDBUF
-
Windows ソケットの実装で SO_RCVBUF オプションと SO_SNDBUFオプションが サポートされている場合、Windows Sockets SPI クライアントは異なるバッファー サイズ (大きいか小さいか) を要求できます。 サービス プロバイダーが要求された金額全体を使用できなかった場合でも、呼び出しは成功する可能性があります。 Windows ソケット SPI クライアントは、同じオプションで LPWSPGetSockopt を呼び出して、実際に指定されたバッファー サイズを確認する必要があります。
-
PVD_CONFIG
-
このオブジェクトは、ソケット s に関連付けられているサービス プロバイダーの構成情報を格納します。 このデータ構造の正確な形式は、サービス プロバイダー固有です。
要件
要件 値 サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ] サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ] Header ws2spi.h こちらもご覧ください