次の方法で共有


CAsyncSocket::SetSockOpt

ソケット オプションを設定します。

BOOL SetSockOpt(
   int nOptionName,
   const void* lpOptionValue,
   int nOptionLen,
   int nLevel = SOL_SOCKET 
);

パラメーター

  • nOptionName
    値を設定するソケット オプション。

  • lpOptionValue
    要求するオプションに指定する値を持つバッファーへのポインター。

  • nOptionLen
    lpOptionValue バッファーのバイト単位のサイズ。

  • nLevel
    オプションが定義されるレベル。サポートされるレベルは SOL_SOCKETIPPROTO_TCP だけです。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。GetLastError を呼び出すと、固有のエラー コードを取得できます。 このメンバー関数では、次のエラーが発生します。

  • WSANOTINITIALISED   この API を使う前に AfxSocketInit の呼び出しが正常終了していることが必要です。

  • WSAENETDOWN   Windows ソケットの実装が、ネットワーク サブシステムの異常を検出しました。

  • WSAEFAULT   lpOptionValue がプロセスのアドレス空間の有効な部分を指していません。

  • WSAEINPROGRESS   実行中の Windows ソケット呼び出しがブロッキングされています。

  • WSAEINVAL   nLevel が無効か、または lpOptionValue 内の情報が無効です。

  • WSAENETRESET   SO_KEEPALIVE が設定されているときに、接続がタイムアウトしました。

  • WSAENOPROTOOPT   オプションが無効またはサポートされていません。 特に SO_BROADCAST オプションは SOCK_STREAM 型のソケットでサポートしていません。また、SO_DONTLINGERSO_KEEPALIVESO_LINGER、および SO_OOBINLINE オプションは、SOCK_DGRAM 型のソケットではサポートされていません。

  • WSAENOTCONN   SO_KEEPALIVE が設定されているときに、接続がリセットされました。

  • WSAENOTSOCK   記述子がソケットではありません。

解説

SetSockOpt は、すべての型の、任意の状態のソケットに関連付けられたソケット オプションの現在値を設定します。 オプションは、複数のプロトコル レベルに存在できますが、ここで指定するオプションは、最上位の "ソケット" レベルに存在するオプションだけです。 オプションは、ソケット操作に影響します。ソケット操作とは、通常のデータ ストリームで緊急データを受け取れるかどうか、ソケット上でブロードキャスト メッセージを送信できるかどうかを指します。

これには 2 種類のソケット オプションがあります。ブール型のオプションを有効にするまたは機能または動作を無効にして、整数値または構造体を必要とするオプション。 ブール値のオプションを有効にするには、lpOptionValue に 0 以外の整数へのポインターを設定します。 無効にするには、lpOptionValue に 0 値の整数へのポインターを設定します。 ブール値のオプションの nOptionLen には、sizeof(BOOL) を設定します。 その他のオプションでは、オプションに必要な値を持つ整数または構造体へのポインターを lpOptionValue に設定します。さらに、その整数や構造体の長さを nOptionLen に設定します。

SO_LINGER は、ソケットのキューに未送信データが残っている場合に、そのソケットを閉じるために Close 関数を呼び出したときの動作を制御します。

既定では、使用中のローカル アドレスにソケットをバインドできません (「Bind」を参照してください)。 しかし、使用中のローカル アドレスにソケットをバインドすることにより、アドレスを "再利用" する方が望ましい場合もあります。 各接続は、ローカル アドレスとリモート アドレスを組み合わせて一意に識別されます。したがって、リモート アドレスが異なっていれば、同じローカル アドレスに 2 つのソケットをバインドしても問題ありません。

使いたいアドレスが既にほかのソケットで使われているため、ソケットに対して Bind を呼び出せないことを Windows ソケットの実装に通知するには、アプリケーションで Bind を呼び出す前にソケットに対して SO_REUSEADDR ソケット オプションを設定します。 オプションの時にのみ解釈されることに注意してください、バインドを呼び出します。したがって、既存のアドレスにはバインドするのには、ソケット オプションを設定する (無害ですが) 不要なは設定やオプションの後のリセット、バインド呼び出しがありません影響またはその他のソケット。

アプリケーションで TCP (伝送制御プロトコル) 接続での "接続保持" パケットの使用を Windows ソケットの実装に要求するには、SO_KEEPALIVE ソケット オプションを設定します。 Windows ソケットの実装は、キープア ライブの使用をサポートする必要があります。場合は、正確なセマンティクスは実装に固有ですが、RFC 1122 セクション 4.2.3.6 に従う必要があります。「インターネット ホストに関する要件-通信レイヤー。」"接続保持" の結果、接続がドロップしているときは、ソケットで実行中のすべての呼び出しはエラー コード WSAENETRESET を返します。さらにその後の呼び出しは WSAENOTCONN を返し、異常終了します。

TCP_NODELAY オプションは、Nagle アルゴリズムを無効にします。 Nagle アルゴリズムは小さなパケットの送信数を減らすために使います。このアルゴリズムではパケットの送信数を減少させるために、パケットの全サイズが送信できるようになるまでホストで未応答の送信データをバッファリングします。 アプリケーションによってはこのアルゴリズムが性能を低下させることがあります。そのときは、TCP_NODELAY を使ってこのアルゴリズムをオフにします。 TCP_NODELAY を設定するとネットワークの性能に重大な悪影響を及ぼすことがあるため、アプリケーションの作成者は、TCP_NODELAY を設定することによる影響度をよく理解し、特に必要でない限り設定しないでください。 サポートされているソケット オプションの中で、TCP_NODELAY のみが IPPROTO_TCP レベルを使っています。ほかのオプションはすべて SOL_SOCKET レベルを使います。

アプリケーションで SO_DEBUG オプションを設定すると、Windows ソケットの実装はデバッグ情報を出力できます。

SetSockOpt では、次のオプションをサポートしています。 型は、lpOptionValue によってアドレスが指定されるデータの型を示します。

次のように入力します。

説明

SO_BROADCAST

BOOL

ソケットで、ブロードキャスト メッセージの転送を許可します。

SO_DEBUG

BOOL

デバッグ情報を記録します。

SO_DONTLINGER

BOOL

Close は未送信データの送信を待機しません。 このオプションを設定することは、l_onoff を 0 にして SO_LINGER を設定することと同じです。

SO_DONTROUTE

BOOL

ルートはありません。インタ フェースに直接送信します。

SO_KEEPALIVE

BOOL

接続保持パケットを送信します。

SO_LINGER

struct LINGER

未送信データがあるとき、Close を遅延します。

SO_OOBINLINE

BOOL

通常のデータ ストリームで帯域外データを受信します。

SO_RCVBUF

int

受信用のバッファー サイズを指定します。

SO_REUSEADDR

BOOL

ソケットを使用中のアドレスにバインドできるようにします。 「CAsyncSocket::Bind」を参照してください。

SO_SNDBUF

int

送信用のバッファー サイズを指定します。

TCP_NODELAY

BOOL

送信結合用の Nagle アルゴリズムを無効にします。

次の BSD (Berkeley Software Distribution) オプションは SetSockOpt ではサポートしません。

次のように入力します。

説明

SO_ACCEPTCONN

BOOL

ソケットはリスナーです。

SO_ERROR

int

エラー状態を取得し、クリアします。

SO_RCVLOWAT

int

低水位マークを受信します。

SO_RCVTIMEO

int

タイムアウトを受信します。

SO_SNDLOWAT

int

低水位マークを送信します。

SO_SNDTIMEO

int

タイムアウトを送信します。

SO_TYPE

int

ソケットの型です。

IP_OPTIONS

 

IP ヘッダーにオプション フィールドを設定します。

必要条件

**ヘッダー:**afxsock.h

参照

参照

CAsyncSocket クラス

階層図

CAsyncSocket::AsyncSelect

CAsyncSocket::Bind

CAsyncSocket::Create

CAsyncSocket::GetSockOpt

CAsyncSocket::IOCtl

その他の技術情報

CAsyncSocket のメンバー