LPWSPBIND コールバック関数 (ws2spi.h)
LPWSPBind 関数は、ローカル アドレス (つまり、名前) をソケットに関連付けます。
構文
LPWSPBIND Lpwspbind;
int Lpwspbind(
[in] SOCKET s,
[in] const sockaddr *name,
[in] int namelen,
[out] LPINT lpErrno
)
{...}
パラメーター
[in] s
バインドされていないソケットを識別する記述子。
[in] name
ソケットに割り当てるアドレス ( sockaddr 構造体の形式)。
sa_family メンバーを除き、sockaddr の内容はネットワークのバイト順で表されます。 Windows ソケット 2 では、 name パラメーターは sockaddr 構造体へのポインターとして厳密には解釈されません。 Winsock の互換性のためにこの方法でキャストされます。 実際の構造は、異なるアドレス ファミリのコンテキストで異なる方法で解釈されます。 唯一の要件は、最初の u_short はアドレス ファミリであり、メモリ バッファーの合計サイズ (バイト単位) は namelen です。
[in] namelen
name パラメーターが指す構造体の長さ (バイト単位)。
[out] lpErrno
エラー コードへのポインター。
戻り値
エラーが発生しない場合、 LPWSPBind は 0 を返します。 それ以外の場合は、SOCKET_ERRORを返し、 lpErrno で特定のエラー コードを使用できます。
エラー コード | 意味 |
---|---|
ネットワーク サブシステムが失敗しました。 | |
ローカル コンピューター上の一部のプロセスは、既に同じ完全修飾アドレス (たとえば、**AF_INET** の場合は IP アドレスとポート) にバインドされており、ソケットは、SO_REUSEADDRでのアドレスの再利用を許可するようにマークされていません。 ( LPWSPSetSockOpt のSO_REUSEADDR ソケット オプションを参照してください。 | |
指定したアドレスがこのコンピューターの有効なアドレスではありません。 | |
name または namelen パラメーターがユーザー アドレス空間の有効な部分ではない、namelen パラメーターが小さすぎる、name パラメーターに関連付けられているアドレス ファミリのアドレス形式が正しくない、または name で指定されたメモリ ブロックの最初の 2 バイトがソケット記述子に関連付けられているアドレス ファミリと一致しない。 | |
関数は、コールバックが進行中のときに呼び出されます。 | |
ソケットは既にアドレスにバインドされています。 | |
十分なバッファーがありません。接続が多すぎます。 | |
記述子はソケットではありません。 |
注釈
LPWSPBind 関数は、LPWSPConnect 関数または LPWSPListen 関数の後続の呼び出しの前に、接続されていないコネクションレスソケットまたは接続指向ソケットで使用されます。 LPWSPSocket を使用してソケットを作成すると、そのソケットは名前空間 (アドレス ファミリ) に存在しますが、名前もローカル アドレスも割り当てされていません。 LPWSPBind 関数は、名前のないソケットにローカル名を割り当てることで、ソケットのローカル関連付けを確立します。
たとえば、インターネット アドレス ファミリの名前は、アドレス ファミリ、ホスト アドレス、および Winsock SPI クライアントを識別するポート番号の 3 つの部分で構成されます。 Windows ソケット 2 では、 name パラメーターは sockaddr 構造体へのポインターとして厳密には解釈されません。 サービス プロバイダーは、サイズ namelen のメモリ ブロックへのポインターとして自由に見 なします。 このブロックの最初の 2 バイト (sockaddr 宣言のsa_familyに対応) には、ソケットの作成に使用されたアドレス ファミリが含まれている必要があります。 それ以外の場合は、 エラー WSAEFAULT が示されます。
Windows Sockets 2 SPI クライアントが、割り当てられているローカル アドレスを気にしない場合は、name パラメーターのsa_data メンバーにADDR_ANYマニフェスト定数値を指定します。 これにより、適切なネットワーク アドレスを使用するようにサービス プロバイダーに指示します。 TCP/IP の場合、ポートがゼロとして指定されている場合、サービス プロバイダーは、1024 ~ 5000 の値を持つ一意のポートを Winsock SPI クライアントに割り当てます。 SPI クライアントは、LPWSPBind の後に LPWSPGetSockName を使用して、アドレスと割り当てられているポートを学習できます。 ただし、インターネット アドレスが INADDR_ANY と等しい場合、 LPWSPGetSockOpt はソケットが接続されるまでアドレスを指定できるとは限らないことに注意してください。ホストがマルチホームの場合は複数のアドレスを有効にできるためです。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
Header | ws2spi.h |