LPWSPGETSOCKOPT
コールバックシグネチャ
INT LPWSPGETSOCKOPT(
SOCKET s,
INT level,
INT optname,
LPSTR optval,
INT* optlen,
INT* lpErrno
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| s | SOCKET | ソケットを識別する記述子です。 |
| level | INT | オプションが定義されているレベルです。サポートされるレベルには SOL_SOCKET が含まれます。(プロトコル固有のレベルについては付録を参照してください。) |
| optname | INT | 値を取得する対象のソケットオプションです。 |
| optval | LPSTR | 要求したオプションの値が返されるバッファーへのポインターです。 |
| optlen | INT* | optval バッファーのサイズ (バイト単位) へのポインターです。 |
| lpErrno | INT* | エラーコードへのポインターです。 |
公式ドキュメント
LPWSPGetSockOpt 関数は、ソケットオプションを取得します。
戻り値
エラーが発生しなかった場合、LPWSPGetSockOpt は 0 を返します。それ以外の場合は SOCKET_ERROR が返され、固有のエラーコードを lpErrno から取得できます。
| エラーコード | 意味 |
|---|---|
| ネットワークサブシステムで障害が発生しました。 | |
| optval または optlen パラメーターのいずれかがユーザーアドレス空間の有効な部分ではないか、optlen パラメーターが小さすぎます。 | |
| level が不明であるか無効です。 | |
| コールバックの処理中に関数が呼び出されました。 | |
| オプションが不明であるか、指定されたプロトコルファミリではサポートされていません。 | |
| 記述子がソケットではありません。 |
解説(Remarks)
LPWSPGetSockOpt 関数は、任意の型・任意の状態のソケットに関連付けられたソケットオプションの現在の値を取得し、その結果を optval に格納します。オプションは複数のプロトコルレベルに存在することがありますが、最上位のソケットレベルには常に存在します。オプションは、パケットのルーティングや OOB データ転送など、ソケットの動作に影響します。
選択したオプションに関連付けられた値は、バッファー optval に返されます。optlen が指す整数には、あらかじめこのバッファーのサイズを格納しておく必要があります。戻り時には、返された値のサイズが設定されます。SO_LINGER の場合は linger 構造体のサイズとなり、その他のほとんどのオプションでは整数のサイズとなります。
Windows Sockets SPI クライアントは、指定するパラメーターが直接または間接的に指すメモリ領域を割り当てる責任を負います。
オプションが LPWSPSetSockOpt で一度も設定されていない場合、LPWSPGetSockOpt はそのオプションの既定値を返します。
ソケットオプションの詳細については、Socket Options を参照してください。
level = SOL_SOCKET
| 値 | 型 | 意味 | 既定値 |
|---|---|---|---|
| SO_ACCEPTCONN | BOOL | ソケットは LPWSPListen によってリッスンしています。 | LPWSPListen が実行されていない限り FALSE。 |
| SO_BROADCAST | BOOL | ソケットはブロードキャストメッセージの送受信用に構成されています。 | FALSE |
| SO_DEBUG | BOOL | デバッグが有効です。 | FALSE |
| SO_DONTLINGER | BOOL | true の場合、SO_LINGER オプションは無効です。 | TRUE |
| SO_DONTROUTE | BOOL | ルーティングが無効です。このソケットオプションの設定は AF_INET ソケットでは成功しますが無視されます。AF_INET6 ソケットでは WSAENOPROTOOPT で失敗します。このオプションは ATM ソケットではサポートされません (エラーになります)。 | FALSE |
| SO_ERROR | integer | エラー状態を取得してクリアします。 | 0 |
| SO_GROUP_ID | GROUP | 予約済みです。 | Null |
| SO_GROUP_PRIORITY | integer | 予約済みです。 | 0 |
| SO_KEEPALIVE | BOOL | キープアライブが送信されています。ATM ソケットではサポートされません (エラーになります)。 | FALSE |
| SO_LINGER | LINGER 構造体 | 現在の linger オプションを返します。 | 1 はオン (既定)、0 はオフ |
| SO_MAX_MSG_SIZE | unsigned integer | メッセージ指向のソケット型 (SOCK_DGRAM など) におけるメッセージの最大サイズです。ストリーム指向のソケットでは意味を持ちません。 | 実装依存 |
| SO_OOBINLINE | BOOL | OOB データが通常のデータストリームで受信されています。 | FALSE |
| SO_PROTOCOL_INFO | WSAPROTOCOL_INFO 構造体 | このソケットにバインドされているプロトコルのプロトコル情報の説明です。 | プロトコル依存 |
| SO_RCVBUF | integer | 受信用に予約された、ソケットごとのバッファー領域の合計です。これは SO_MAX_MSG_SIZE とは無関係であり、TCP 受信ウィンドウのサイズに必ずしも対応しません。 | 実装依存 |
| SO_REUSEADDR | BOOL | 既に使用中のアドレスにソケットをバインドできます。このオプションは ATM ソケットには適用されません。 | FALSE。 |
| SO_SNDBUF | integer | 送信用に予約された、ソケットごとのバッファー領域の合計です。これは SO_MAX_MSG_SIZE とは無関係であり、TCP 送信ウィンドウのサイズに必ずしも対応しません。 | 実装依存 |
| SO_TYPE | integer | ソケットの型 (SOCK_STREAM など) です。 | LPWSPSocket">LPWSPSocket で作成されたとおり |
| PVD_CONFIG | サービスプロバイダー依存 | ソケット s に関連付けられたサービスプロバイダーから取得される不透明なデータ構造体オブジェクトです。このオブジェクトには、サービスプロバイダーの現在の構成情報が格納されます。このデータ構造体の正確な形式はサービスプロバイダー固有です。 | 実装依存 |
サポートされていないオプションを指定して LPWSPGetSockOpt を呼び出すと、lpErrno にエラーコード WSAENOPROTOOPT が返されます。
-
Windows Sockets SPI クライアントによって SO_DEBUG オプションが設定された場合、Windows Sockets サービスプロバイダーはデバッグ情報を出力することが推奨されます (必須ではありません)。デバッグ情報を生成するメカニズムとその形式は、この仕様の範囲外です。
-
SO_ERROR オプションは、ソケットごとのエラーコード (WS2_32.DLL が保持するスレッドごとのエラーコードと必ずしも同じではありません) を返し、リセットします。そのソケットに対する Windows Sockets 呼び出しが成功しても、SO_ERROR オプションが返すソケットごとのエラーコードはリセットされません。
-
予約済みです。この値は NULL である必要があります。
-
予約済みです。
-
Windows Sockets SPI クライアントは、SO_KEEPALIVE ソケットオプションをオンにすることで、TCP/IP サービスプロバイダーに対して TCP 接続でのキープアライブパケットの使用を有効にするよう要求できます。Windows Sockets プロバイダーはキープアライブの使用をサポートする必要はありません。サポートする場合、その正確なセマンティクスは実装固有ですが、RFC 1122 Requirements for Internet Hosts—Communication Layers のセクション 4.2.3.6 に準拠する必要があります。(このリソースは英語のみで提供されている場合があります。) キープアライブの結果として接続が切断された場合、そのソケットで進行中のすべての呼び出しにエラーコード WSAENETRESET が返され、以降の呼び出しは WSAENOTCONN で失敗します。
-
SO_LINGER は、ソケットに未送信のデータがキューイングされている状態で LPWSPCloseSocket が実行されたときの動作を制御します。SO_LINGER の設定が LPWSPCloseSocket のセマンティクスにどのように影響するかについては、LPWSPCloseSocket の説明を参照してください。Windows Sockets SPI クライアントは、次の要素を持つ LINGER 構造体 (optval パラメーターが指す) を作成することで、目的の動作を得ます。
} -
これは取得専用のソケットオプションで、サービスプロバイダーが実装する、メッセージ指向のソケット型 (SOCK_DGRAM など) における送信メッセージの最大サイズを示します。バイトストリーム指向のソケットでは意味を持ちません。受信メッセージの最大サイズを判別する手段は用意されていません。
-
これは取得専用のオプションで、このソケットに関連付けられた WSAPROTOCOL_INFO 構造体を提供します。この構造体の詳細については、WSCEnumProtocols を参照してください。
-
Windows Sockets サービスプロバイダーが SO_RCVBUF および SO_SNDBUF オプションをサポートしている場合、Windows Sockets SPI クライアントは LPWSPSetSockOpt を使用して異なるバッファーサイズ (より大きい、または小さいサイズ) を要求できます。サービスプロバイダーが要求された量のすべてを提供しなかった場合でも、この呼び出しは成功することがあります。Windows Sockets SPI クライアントは、実際に提供されたバッファーサイズを確認するために、同じオプションを指定してこの関数を呼び出す必要があります。
-
既定では、ソケットを、既に使用中のローカルアドレスにバインドする (LPWSPBind を参照) ことはできません。ただし、このような形でアドレスを再利用したい場合もあります。すべての接続はローカルアドレスとリモートアドレスの組み合わせによって一意に識別されるため、リモートアドレスが異なっていれば、2 つのソケットを同じローカルアドレスにバインドしても問題はありません。他のソケットが既に使用しているローカルアドレスへのバインドをソケットの LPWSPBind で許可することを Windows Sockets プロバイダーに通知するには、Windows Sockets SPI クライアントは LPWSPBind を発行する前に、そのソケットに SO_REUSEADDR ソケットオプションを設定する必要があります。なお、このオプションは LPWSPBind の時点でのみ解釈されます。そのため、既存のアドレスにバインドしないソケットにこのオプションを設定することは不要です (ただし無害です)。また、LPWSPBind の後にこのオプションを設定またはリセットしても、そのソケットや他のソケットには影響しません。
-
このオプションは、ソケット s に関連付けられたサービスプロバイダーから不透明なデータ構造体オブジェクトを取得します。このオブジェクトには、サービスプロバイダーの現在の構成情報が格納されます。このデータ構造体の正確な形式はサービスプロバイダー固有です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)