Win32 API 日本語リファレンス
ホーム › Networking.WinSock › LPWSPGETSOCKOPT

LPWSPGETSOCKOPT

コールバック

シグネチャ

INT LPWSPGETSOCKOPT(
    SOCKET s,
    INT level,
    INT optname,
    LPSTR optval,
    INT* optlen,
    INT* lpErrno
);

パラメーター

フィールド型説明
sSOCKETソケットを識別する記述子です。
levelINTオプションが定義されているレベルです。サポートされるレベルには SOL_SOCKET が含まれます。(プロトコル固有のレベルについては付録を参照してください。)
optnameINT値を取得する対象のソケットオプションです。
optvalLPSTR要求したオプションの値が返されるバッファーへのポインターです。
optlenINT*optval バッファーのサイズ (バイト単位) へのポインターです。
lpErrnoINT*エラーコードへのポインターです。

公式ドキュメント

LPWSPGetSockOpt 関数は、ソケットオプションを取得します。

戻り値

エラーが発生しなかった場合、LPWSPGetSockOpt は 0 を返します。それ以外の場合は SOCKET_ERROR が返され、固有のエラーコードを lpErrno から取得できます。

エラーコード 意味
WSAENETDOWN
ネットワークサブシステムで障害が発生しました。
WSAEFAULT
optval または optlen パラメーターのいずれかがユーザーアドレス空間の有効な部分ではないか、optlen パラメーターが小さすぎます。
WSAEINVAL
level が不明であるか無効です。
WSAEINPROGRESS
コールバックの処理中に関数が呼び出されました。
WSAENOPROTOOPT
オプションが不明であるか、指定されたプロトコルファミリではサポートされていません。
WSAENOTSOCK
記述子がソケットではありません。

解説(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 が返されます。

SO_DEBUG

Windows Sockets SPI クライアントによって SO_DEBUG オプションが設定された場合、Windows Sockets サービスプロバイダーはデバッグ情報を出力することが推奨されます (必須ではありません)。デバッグ情報を生成するメカニズムとその形式は、この仕様の範囲外です。

SO_ERROR

SO_ERROR オプションは、ソケットごとのエラーコード (WS2_32.DLL が保持するスレッドごとのエラーコードと必ずしも同じではありません) を返し、リセットします。そのソケットに対する Windows Sockets 呼び出しが成功しても、SO_ERROR オプションが返すソケットごとのエラーコードはリセットされません。

SO_GROUP_ID

予約済みです。この値は NULL である必要があります。

SO_GROUP_PRIORITY

予約済みです。

SO_KEEPALIVE

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

SO_LINGER は、ソケットに未送信のデータがキューイングされている状態で LPWSPCloseSocket が実行されたときの動作を制御します。SO_LINGER の設定が LPWSPCloseSocket のセマンティクスにどのように影響するかについては、LPWSPCloseSocket の説明を参照してください。Windows Sockets SPI クライアントは、次の要素を持つ LINGER 構造体 (optval パラメーターが指す) を作成することで、目的の動作を得ます。

}

SO_MAX_MSG_SIZE

これは取得専用のソケットオプションで、サービスプロバイダーが実装する、メッセージ指向のソケット型 (SOCK_DGRAM など) における送信メッセージの最大サイズを示します。バイトストリーム指向のソケットでは意味を持ちません。受信メッセージの最大サイズを判別する手段は用意されていません。

SO_PROTOCOL_INFOW

これは取得専用のオプションで、このソケットに関連付けられた WSAPROTOCOL_INFO 構造体を提供します。この構造体の詳細については、WSCEnumProtocols を参照してください。

SO_SNDBUF

Windows Sockets サービスプロバイダーが SO_RCVBUF および SO_SNDBUF オプションをサポートしている場合、Windows Sockets SPI クライアントは LPWSPSetSockOpt を使用して異なるバッファーサイズ (より大きい、または小さいサイズ) を要求できます。サービスプロバイダーが要求された量のすべてを提供しなかった場合でも、この呼び出しは成功することがあります。Windows Sockets SPI クライアントは、実際に提供されたバッファーサイズを確認するために、同じオプションを指定してこの関数を呼び出す必要があります。

SO_REUSEADDR

既定では、ソケットを、既に使用中のローカルアドレスにバインドする (LPWSPBind を参照) ことはできません。ただし、このような形でアドレスを再利用したい場合もあります。すべての接続はローカルアドレスとリモートアドレスの組み合わせによって一意に識別されるため、リモートアドレスが異なっていれば、2 つのソケットを同じローカルアドレスにバインドしても問題はありません。他のソケットが既に使用しているローカルアドレスへのバインドをソケットの LPWSPBind で許可することを Windows Sockets プロバイダーに通知するには、Windows Sockets SPI クライアントは LPWSPBind を発行する前に、そのソケットに SO_REUSEADDR ソケットオプションを設定する必要があります。なお、このオプションは LPWSPBind の時点でのみ解釈されます。そのため、既存のアドレスにバインドしないソケットにこのオプションを設定することは不要です (ただし無害です)。また、LPWSPBind の後にこのオプションを設定またはリセットしても、そのソケットや他のソケットには影響しません。

PVD_CONFIG

このオプションは、ソケット s に関連付けられたサービスプロバイダーから不透明なデータ構造体オブジェクトを取得します。このオブジェクトには、サービスプロバイダーの現在の構成情報が格納されます。このデータ構造体の正確な形式はサービスプロバイダー固有です。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)