WSASocketW 関数 (winsock2.h)
WSASocket 関数は、特定のトランスポート サービス プロバイダーにバインドされたソケットを作成します。
構文
SOCKET WSAAPI WSASocketW(
[in] int af,
[in] int type,
[in] int protocol,
[in] LPWSAPROTOCOL_INFOW lpProtocolInfo,
[in] GROUP g,
[in] DWORD dwFlags
);
パラメーター
[in] af
アドレス ファミリの仕様。 アドレス ファミリに使用できる値は、 Winsock2.h ヘッダー ファイルで定義されています。
Windows Vista 以降用にリリースされたWindows SDKでは、ヘッダー ファイルのorganizationが変更され、アドレス ファミリの使用可能な値が Ws2def.h ヘッダー ファイルで定義されます。 Ws2def.h ヘッダー ファイルは Winsock2.h に自動的に含まれるので、直接使用しないでください。
現在サポートされている値は、IPv4 と IPv6 のインターネット アドレス ファミリ形式であるAF_INETまたはAF_INET6です。 アドレス ファミリの Windows ソケット サービス プロバイダーがインストールされている場合、アドレス ファミリのその他のオプション (NetBIOS で使用するためのAF_NETBIOSなど) がサポートされます。 AF_ アドレス ファミリ定数とPF_ プロトコル ファミリ定数の値は同一であるため ( たとえば、AF_INET と PF_INET)、どちらの定数も使用できます。
次の表に、アドレス ファミリの一般的な値を示しますが、他の多くの値を使用できます。
Af | 意味 |
---|---|
|
アドレス ファミリが指定されていません。 |
|
インターネット プロトコル バージョン 4 (IPv4) アドレス ファミリ。 |
|
IPX/SPX アドレス ファミリ。 このアドレス ファミリは、NWLink IPX/SPX NetBIOS 互換トランスポート プロトコルがインストールされている場合にのみサポートされます。
このアドレス ファミリは、Windows Vista 以降ではサポートされていません。 |
|
AppleTalk アドレス ファミリ。 このアドレス ファミリは、AppleTalk プロトコルがインストールされている場合にのみサポートされます。
このアドレス ファミリは、Windows Vista 以降ではサポートされていません。 |
|
NetBIOS アドレス ファミリ。 このアドレス ファミリは、NetBIOS 用 Windows ソケット プロバイダーがインストールされている場合にのみサポートされます。
NetBIOS 用 Windows ソケット プロバイダーは、32 ビット バージョンの Windows でサポートされています。 このプロバイダーは、既定で 32 ビット バージョンの Windows にインストールされます。 NetBIOS 用 Windows ソケット プロバイダーは、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、または Windows XP を含む 64 ビット バージョンの Windows ではサポートされていません。 NetBIOS 用 Windows ソケット プロバイダーは、 型 パラメーターが SOCK_DGRAM に設定されているソケットのみをサポートします。 NetBIOS 用 Windows ソケット プロバイダーは、 NetBIOS プログラミング インターフェイスとは直接関係ありません。 NetBIOS プログラミング インターフェイスは、Windows Vista、Windows Server 2008 以降ではサポートされていません。 |
|
インターネット プロトコル バージョン 6 (IPv6) アドレス ファミリ。 |
|
赤外線データ関連付け (IrDA) アドレス ファミリ。
このアドレス ファミリは、コンピューターに赤外線ポートとドライバーがインストールされている場合にのみサポートされます。 |
|
Bluetooth アドレス ファミリ。
このアドレス ファミリは、コンピューターに Bluetooth アダプターとドライバーがインストールされている場合、SP2 以降の Windows XP でサポートされます。 |
[in] type
新しいソケットの型指定。
ソケットの種類に使用できる値は、 Winsock2.h ヘッダー ファイルで定義されています。
次の表に、Windows ソケット 2 でサポートされている 型 パラメーターに使用できる値を示します。
Type | 説明 |
---|---|
|
OOB データ転送メカニズムを使用して、シーケンス化された信頼性の高い双方向の接続ベースのバイト ストリームを提供するソケット型。 このソケットの種類では、インターネット アドレス ファミリ (AF_INET または AF_INET6) に伝送制御プロトコル (TCP) が使用されます。 |
|
固定 (通常は小さい) 最大長のコネクションレスで信頼性の低いバッファーであるデータグラムをサポートするソケット型。 このソケットの種類では、インターネット アドレス ファミリ (AF_INETまたはAF_INET6) にユーザー データグラム プロトコル (UDP) が使用されます。 |
|
アプリケーションが次の上位層プロトコル ヘッダーを操作できるようにする生のソケットを提供するソケットの種類。 IPv4 ヘッダーを操作するには、 ソケットで IP_HDRINCL ソケット オプションを設定する必要があります。 IPv6 ヘッダーを操作するには、 ソケットで IPV6_HDRINCL ソケット オプションを設定する必要があります。 |
|
信頼性の高いメッセージ データグラムを提供するソケットの種類。 この種類の例として、Windows でのプラグマティック一般マルチキャスト (PGM) マルチキャスト プロトコルの実装があります。これは、多くの場合、 信頼性の高いマルチキャスト プログラミングと呼ばれます。
この 型 の値は、Reliable Multicast Protocol がインストールされている場合にのみサポートされます。 |
|
データグラムに基づいて擬似ストリーム パケットを提供するソケットの種類。 |
Windows ソケット 2 では、新しいソケットの種類が導入されました。 アプリケーションは、 WSAEnumProtocols 関数を使用して、使用可能な各トランスポート プロトコルの属性を動的に検出できます。 そのため、アプリケーションはアドレス ファミリに使用可能なソケットの種類とプロトコル オプションを決定し、このパラメーターを指定するときにこの情報を使用できます。 Winsock2.h および Ws2def.h ヘッダー ファイルのソケットの種類の定義は、新しいソケットの種類、アドレス ファミリ、およびプロトコルが定義されると、定期的に更新されます。
Windows Sockets 1.1 では、使用可能なソケットの種類は SOCK_DGRAM と SOCK_STREAMのみです。
[in] protocol
使用するプロトコル。 プロトコル パラメーターに使用できるオプションは、指定されたアドレス ファミリとソケットの種類に固有です。 プロトコルに使用できる値は、Winsock2.h ヘッダー ファイルと Wsrm.h ヘッダー ファイルで定義されています。
Windows Vista 以降用にリリースされたWindows SDKでは、ヘッダー ファイルのorganizationが変更され、このパラメーターには、Ws2def.h ヘッダー ファイルで定義されている IPPROTO 列挙型の値のいずれかを指定できます。 Ws2def.h ヘッダー ファイルは Winsock2.h に自動的に含まれるので、直接使用しないでください。
値 0 を指定した場合、呼び出し元はプロトコルを指定せず、サービス プロバイダーは使用する プロトコル を選択します。
af パラメーターがAF_INETまたはAF_INET6で、タイプがSOCK_RAWの場合、プロトコルに指定された値は、IPv6 または IPv4 パケット・ヘッダーのプロトコル・フィールドに設定されます。
プロトコルの一般的な 値を次 の表に示しますが、他の多くの値を使用できます。
[in] lpProtocolInfo
作成するソケットの特性を定義する WSAPROTOCOL_INFO 構造体へのポインター。 このパラメーターが NULL でない場合、ソケットは、指定された WSAPROTOCOL_INFO 構造体に関連付けられているプロバイダーにバインドされます。
[in] g
新しいソケットと新しいソケット グループを作成するときに実行する既存のソケット グループ ID または適切なアクション。
g が既存のソケット グループ ID の場合は、このグループによって設定されたすべての要件が満たされていれば、新しいソケットをこのソケット グループに参加させます。
g が既存のソケット グループ ID でない場合は、次の値を使用できます。
[in] dwFlags
追加のソケット属性を指定するために使用されるフラグのセット。
これらのフラグの組み合わせを設定できますが、一部の組み合わせは許可されません。
値 | 意味 |
---|---|
|
重複した I/O 操作をサポートするソケットを作成します。
ほとんどのソケットは、このフラグを設定して作成する必要があります。 重複するソケットは、重複した I/O 操作に 対して WSASend、 WSASendTo、 WSARecv、 WSARecvFrom、 および WSAIoctl を利用できます。これにより、複数の操作を同時に開始して進行中にすることができます。 重複する操作 (WSASend、 WSARecv、 WSASendTo、 WSARecvFrom、 WSAIoctl) を許可するすべての関数は、重複する操作に関連するパラメーターの値が NULL の場合、重複するソケットでのオーバーラップされていない使用もサポートします。 |
|
マルチポイント セッションでc_rootになるソケットを作成します。
この属性は、ソケットを作成するトランスポート プロバイダーの WSAPROTOCOL_INFO 構造がマルチポイントまたはマルチキャスト メカニズムをサポートし、マルチポイント セッションのコントロール プレーンがルート化されている場合にのみ許可されます。 これは、XP1_SUPPORT_MULTIPOINTフラグとXP1_MULTIPOINT_CONTROL_PLANEフラグが設定されたWSAPROTOCOL_INFO構造体の dwServiceFlags1 メンバーによって示されます。 lpProtocolInfo パラメーターが NULL でない場合、トランスポート プロバイダーのWSAPROTOCOL_INFO構造体は lpProtocolInfo パラメーターによって指されます。 lpProtocolInfo パラメーターが NULL の場合、WSAPROTOCOL_INFO構造体は af、type、および protocol パラメーターに指定された値によって選択されたトランスポート プロバイダーに基づきます。 マルチポイント セッションの詳細については、「 マルチポイントとマルチキャストのセマンティクス 」を参照してください。 |
|
マルチポイント セッションでc_leafになるソケットを作成します。
この属性は、ソケットを作成するトランスポート プロバイダーの WSAPROTOCOL_INFO 構造がマルチポイントまたはマルチキャスト メカニズムをサポートし、マルチポイント セッションのコントロール プレーンがルート化されていない場合にのみ許可されます。 これは、XP1_SUPPORT_MULTIPOINT フラグが設定され、XP1_MULTIPOINT_CONTROL_PLANE フラグが設定されていないWSAPROTOCOL_INFO構造体のdwServiceFlags1 メンバーによって示されます。 lpProtocolInfo パラメーターが NULL でない場合、トランスポート プロバイダーのWSAPROTOCOL_INFO構造体は lpProtocolInfo パラメーターによって指されます。 lpProtocolInfo パラメーターが NULL の場合、WSAPROTOCOL_INFO構造体は af、type、および protocol パラメーターに指定された値によって選択されたトランスポート プロバイダーに基づきます。 マルチポイント セッションの詳細については、「 マルチポイントとマルチキャストのセマンティクス 」を参照してください。 |
|
マルチポイント セッションでd_rootになるソケットを作成します。
この属性は、ソケットを作成するトランスポート プロバイダーの WSAPROTOCOL_INFO 構造がマルチポイントまたはマルチキャスト メカニズムをサポートし、マルチポイント セッションのデータ プレーンがルート化されている場合にのみ許可されます。 これは、XP1_SUPPORT_MULTIPOINTフラグとXP1_MULTIPOINT_DATA_PLANEフラグが設定されたWSAPROTOCOL_INFO構造体の dwServiceFlags1 メンバーによって示されます。 lpProtocolInfo パラメーターが NULL でない場合、トランスポート プロバイダーのWSAPROTOCOL_INFO構造体は lpProtocolInfo パラメーターによって指されます。 lpProtocolInfo パラメーターが NULL の場合、WSAPROTOCOL_INFO構造体は af、type、および protocol パラメーターに指定された値によって選択されたトランスポート プロバイダーに基づきます。 マルチポイント セッションの詳細については、「 マルチポイントとマルチキャストのセマンティクス 」を参照してください。 |
|
マルチポイント セッションでd_leafになるソケットを作成します。
この属性は、ソケットを作成するトランスポート プロバイダーの WSAPROTOCOL_INFO 構造がマルチポイントまたはマルチキャスト メカニズムをサポートし、マルチポイント セッションのデータ プレーンがルート化されていない場合にのみ許可されます。 これは、XP1_SUPPORT_MULTIPOINT フラグが設定され、XP1_MULTIPOINT_DATA_PLANE フラグが設定されていないWSAPROTOCOL_INFO構造体のdwServiceFlags1 メンバーによって示されます。 lpProtocolInfo パラメーターが NULL でない場合、トランスポート プロバイダーのWSAPROTOCOL_INFO構造体は lpProtocolInfo パラメーターによって指されます。 lpProtocolInfo パラメーターが NULL の場合、WSAPROTOCOL_INFO構造体は af、type、および protocol パラメーターに指定された値によって選択されたトランスポート プロバイダーに基づきます。 マルチポイント セッションの詳細については、「 マルチポイントとマルチキャストのセマンティクス 」を参照してください。 |
|
任意のアクセス制御リスト (DACL) ではなく、セキュリティ アクセス制御リスト (SACL) を含むソケットにセキュリティ記述子を設定できるソケットを作成します。
SACL は、オブジェクトでアクセスチェックが発生したときに監査とアラームを生成するために使用されます。 ソケットの場合、アクセスチェックが発生して、ソケットがバインド関数に指定された特定のアドレスへのバインドを許可される必要があるかどうかを判断します。 ACCESS_SYSTEM_SECURITYアクセス権は、オブジェクトのセキュリティ記述子で SACL を取得または設定する機能を制御します。 システムは、要求スレッドのアクセス トークンで SE_SECURITY_NAME 特権が有効になっている場合にのみ、このアクセス権を付与します。 |
|
継承できないソケットを作成します。
WSASocket またはソケット関数によって作成されたソケット ハンドルは、既定で継承可能です。 このフラグを設定すると、ソケット ハンドルは継承できません。 GetHandleInformation 関数を使用して、WSA_FLAG_NO_HANDLE_INHERIT フラグが設定されたソケット ハンドルが作成されたかどうかを判断できます。 GetHandleInformation 関数は、HANDLE_FLAG_INHERIT値が設定されていることを返します。 このフラグは、WINDOWS 7 SP1、Windows Server 2008 R2 SP1 以降でサポートされています |
戻り値
エラーが発生しない場合、 WSASocket は新しいソケットを参照する記述子を返します。 それ以外の場合は、INVALID_SOCKETの値が返され、 WSAGetLastError を呼び出すことによって特定のエラー コードを取得できます。
エラー コード | 意味 |
---|---|
この関数を使用する前に 、WSAStartup 呼び出しが正常に行われる必要があります。 | |
ネットワーク サブシステムが失敗しました。 | |
指定されたアドレス ファミリはサポートされていません。 | |
lpProtocolInfo パラメーターがプロセス・アドレス・スペースの有効な部分にありません。 | |
ブロックしている Windows ソケット 1.1 呼び出しが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。 | |
この値は、次のいずれかの条件に当てはまります。
|
|
サービス プロバイダーから 2.2 以外のバージョンが返されました。 | |
サービス プロバイダーから WSPStartup に無効なプロシージャ テーブルまたは不完全なプロシージャ テーブルが返されました。 | |
これ以上使用できるソケット記述子がありません。 | |
バッファーに空き領域がありません。 ソケットを作成できません。 | |
指定されたプロトコルはサポートされません。 | |
指定されたプロトコルがこのソケットに対して正しくない型です。 | |
サービス プロバイダーの初期化に失敗しました。 このエラーは、階層型サービス プロバイダー (LSP) または名前空間プロバイダーが正しくインストールされていない場合、またはプロバイダーが正しく動作しなかった場合に返されます。 | |
指定されたソケットの種類は、このアドレス ファミリではサポートされていません。 |
注釈
WSASocket 関数を使用すると、ソケット記述子と関連リソースが割り当てられ、トランスポート サービス プロバイダーに関連付けられます。 ほとんどのソケットは、dwFlags パラメーターに設定された WSA_FLAG_OVERLAPPED 属性を使用して作成する必要があります。 この属性を使用して作成されたソケットでは、パフォーマンスを向上させる重複した I/O 操作の使用がサポートされています。 既定では、 WSASocket 関数で作成されたソケットには、この重複する属性は設定されません。 これに対し、 ソケット 関数は、重複した I/O 操作を既定の動作としてサポートするソケットを作成します。
lpProtocolInfo パラメーターが NULL の場合、Winsock は、af、type、および protocol パラメーターで指定されたアドレス ファミリ、ソケットの種類、プロトコルの要求された組み合わせをサポートする最初の使用可能なトランスポート サービス プロバイダーを利用します。
lpProtocolInfo パラメーターが NULL でない場合、ソケットは、指定されたWSAPROTOCOL_INFO構造体に関連付けられているプロバイダーにバインドされます。 この場合、アプリケーションは、af、type、またはプロトコルのパラメーターの値としてマニフェスト定数FROM_PROTOCOL_INFOを指定できます。 これは、指定された WSAPROTOCOL_INFO 構造体 (iAddressFamily、 iSocketType、 iProtocol) の対応する値が想定されることを示します。 いずれの場合も、 af、 type、および protocol に指定された値は、変更されていない状態でトランスポート サービス プロバイダーに渡されます。
af、type、および protocol に基づいてプロトコルとそのサポート サービス プロバイダーを選択する場合、この手順では、プロトコルレイヤー自体ではなく、基本プロトコルまたはプロトコル チェーンのみを選択します。 非チェーン プロトコル レイヤーは、 型 または af に部分的な一致があるとは見なされません。 つまり、適切なプロトコルが見つからない場合、 WSAEAFNOSUPPORT または WSAEPROTONOSUPPORT のエラー コードは発生しません。
WSASocket 関数を使用してソケットを作成する場合、dwFlags パラメーターには、SO_RCVTIMEOまたはSO_SNDTIMEOソケット オプションを正しく機能させるために、WSA_FLAG_OVERLAPPED属性が設定されている必要があります。 それ以外の場合、タイムアウトはソケットに対して有効になりません。
SOCK_STREAMなどの接続指向ソケットは、全二重接続を提供し、データを送受信する前に接続状態である必要があります。 指定されたソケットへの接続は、 connect 関数呼び出しまたは WSAConnect 関数呼び出しによって確立されます。 接続されると、WSASend の送信/とWSARecv 呼び出しを/使用してデータを転送できます。 セッションが完了したら、 closesocket 関数を呼び出して、ソケットに関連付けられているリソースを解放する必要があります。 接続指向ソケットの場合は、closesocket 関数を呼び出す前に、ソケットでのデータ転送を停止するためにシャットダウン関数を呼び出す必要があります。
信頼性の高い接続指向ソケットを実装するために使用される通信プロトコルにより、データが失われたり重複したりすることがないようにします。 ピア プロトコルにバッファー領域があるデータを適切な時間内に正常に送信できない場合、接続は切断されたと見なされ、その後の呼び出しは WSAETIMEDOUT に設定されたエラー コードで失敗します。
コネクションレスのメッセージ指向ソケットを使用すると、 sendto/WSASendTo と recvfrom/WSARecvFrom を使用して、任意のピアとの間でデータグラムを送受信できます。 このようなソケットが特定のピアに接続されている場合、データグラムは送信WSASendを使用してその/ピアに送信でき、recv/WSARecv を使用してこのピアから (のみ) 受信できます。
SOCK_RAW型のソケットのサポートは必要ありませんが、サービス プロバイダーは可能な限り生のソケットをサポートすることをお勧めします。
WSASocket 関数を使用すると、サービスで使用されるソケットを作成して、別のソケットがサービスで使用されているのと同じポートにバインドしようとして監査レコードが生成されるようにすることができます。 このオプションを有効にするには、アプリケーションで次の操作を行う必要があります。
- AdjustTokenPrivileges 関数を呼び出して、プロセスのアクセス トークンでSE_SECURITY_NAME特権を有効にします。 この特権は、オブジェクトのセキュリティ記述子に 対するACCESS_SYSTEM_SECURITY アクセス権を設定するために必要です。
- wsASocket 関数を呼び出して、WSA_FLAG_ACCESS_SYSTEM_SECURITY オプションが設定された dwFlag を使用してソケットを作成します。 この操作に必要なSE_SECURITY_NAME特権を有効にするために AdjustTokenPrivileges 関数が最初に呼び出されない場合、WSASocket 関数は失敗します。
- SetSecurityInfo 関数を呼び出して、ソケット上の System Access Control List (SACL) を使用してセキュリティ記述子を設定します。 WSASocket 関数によって返されるソケット ハンドルは、handle パラメーターに渡されます。 関数が成功すると、ソケットのセキュリティ記述子に 対するACCESS_SYSTEM_SECURITY アクセス権が設定されます。
- bind 関数を呼び出して、ソケットを特定のポートにバインドします。 バインド関数が成功すると、別のソケットが同じポートへのバインドを試みると、監査エントリが生成されます。
- AdjustTokenPrivileges 関数を呼び出して、プロセスのアクセス トークンのSE_SECURITY_NAME特権を削除します。これは不要になったためです。
ACCESS_SYSTEM_SECURITYの詳細については、承認ドキュメントの SACL アクセス権と監査生成に関するページを参照してください。
ソケット グループ
WinSock 2 では、ソケット グループの概念をアプリケーションの手段として導入しました。つまり、連携するアプリケーションのセットは、特定のソケットセットが関連しており、このように形成されたグループが特定の属性を持っていることを基になるサービス プロバイダーに示します。 グループ属性には、グループ内の個々のソケットの相対的な優先順位と、グループのサービス品質の仕様が含まれます。ネットワーク経由でマルチメディア ストリームを交換する必要があるアプリケーションは、ソケットのセット間で特定の関係を確立できる場合に役立つ可能性がある例です。 ソケット グループの処理方法については、トランスポートに依存します。
WSASocket 関数と WSAAccept 関数を使用して、新しいソケットの作成時にソケット グループを明示的に作成および結合できます。 ソケットのソケット グループ ID は、level パラメーターが SOL_SOCKET に設定され、optname パラメーターが SO_GROUP_ID に設定された getsockopt 関数を使用して取得できます。 ソケット グループとそれに関連付けられているソケット グループ ID は、このソケット グループに属する最後のソケットが閉じられるまで有効なままです。 ソケット グループ ID は、特定のサービス プロバイダーのすべてのプロセスで一意です。 0 のソケット グループは、ソケットがソケット グループのメンバーではないことを示します。
ソケット グループの相対グループ優先度にアクセスするには、 getsockopt 関数を使用し、 level パラメーターを SOL_SOCKET に設定し、 optname パラメーターを SO_GROUP_PRIORITY に設定します。 ソケット グループの相対グループ優先度は、 setockopt を使用して level パラメーターを SOL_SOCKET に設定し、 optname パラメーターを SO_GROUP_PRIORITY に設定することで設定できます。
Windows に含まれる Winsock プロバイダーでは、ソケット グループを作成でき、SG_CONSTRAINED_GROUPが適用されます。 制約付きソケット グループ内のすべてのソケットは、 型 パラメーターと プロトコル パラメーターに同じ値を使用して作成する必要があります。 制約付きソケット グループは、接続指向ソケットのみで構成される場合があり、グループ化されたすべてのソケットの接続が同じホスト上の同じアドレスに対して行われる必要があります。 これは、Windows に含まれる Winsock プロバイダーによってソケット グループに適用される唯一の制限です。 現在、ソケット グループの優先順位は、Winsock プロバイダーまたは Windows に含まれる TCP/IP スタックでは使用されていません。
コード例
次の例では、 WSASocket 関数の使用方法を示します。#ifndef UNICODE
#define UNICODE 1
#endif
// link with Ws2_32.lib
#pragma comment(lib,"Ws2_32.lib")
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h> // Needed for _wtoi
int __cdecl wmain(int argc, wchar_t **argv)
{
//-----------------------------------------
// Declare and initialize variables
WSADATA wsaData = {0};
int iResult = 0;
// int i = 1;
SOCKET sock = INVALID_SOCKET;
int iFamily = AF_UNSPEC;
int iType = 0;
int iProtocol = 0;
DWORD dwFlags = 0;
// Validate the parameters
if (argc != 5) {
wprintf(L"usage: %s <addressfamily> <type> <protocol> <flags>\n", argv[0]);
wprintf(L" opens a socket for the specified family, type, protocol, and flags\n");
wprintf(L" flags value must be in decimal, not hex\n");
wprintf(L"%ws example usage\n", argv[0]);
wprintf(L" %ws 0 2 17 1\n", argv[0]);
wprintf(L" where AF_UNSPEC=0 SOCK_DGRAM=2 IPPROTO_UDP=17 OVERLAPPED\n", argv[0]);
return 1;
}
iFamily = _wtoi(argv[1]);
iType = _wtoi(argv[2]);
iProtocol = _wtoi(argv[3]);
dwFlags = _wtoi(argv[4]);
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
wprintf(L"WSAStartup failed: %d\n", iResult);
return 1;
}
wprintf(L"Calling socket with following parameters:\n");
wprintf(L" Address Family = ");
switch (iFamily) {
case AF_UNSPEC:
wprintf(L"Unspecified");
break;
case AF_INET:
wprintf(L"AF_INET (IPv4)");
break;
case AF_INET6:
wprintf(L"AF_INET6 (IPv6)");
break;
case AF_NETBIOS:
wprintf(L"AF_NETBIOS (NetBIOS)");
break;
case AF_BTH:
wprintf(L"AF_BTH (Bluetooth)");
break;
default:
wprintf(L"Other");
break;
}
wprintf(L" (%d)\n", iFamily);
wprintf(L" Socket type = ");
switch (iType) {
case 0:
wprintf(L"Unspecified");
break;
case SOCK_STREAM:
wprintf(L"SOCK_STREAM (stream)");
break;
case SOCK_DGRAM:
wprintf(L"SOCK_DGRAM (datagram)");
break;
case SOCK_RAW:
wprintf(L"SOCK_RAW (raw)");
break;
case SOCK_RDM:
wprintf(L"SOCK_RDM (reliable message datagram)");
break;
case SOCK_SEQPACKET:
wprintf(L"SOCK_SEQPACKET (pseudo-stream packet)");
break;
default:
wprintf(L"Other");
break;
}
wprintf(L" (%d)\n", iType);
wprintf(L" Protocol = %d = ", iProtocol);
switch (iProtocol) {
case 0:
wprintf(L"Unspecified");
break;
case IPPROTO_ICMP:
wprintf(L"IPPROTO_ICMP (ICMP)");
break;
case IPPROTO_IGMP:
wprintf(L"IPPROTO_IGMP (IGMP)");
break;
case IPPROTO_TCP:
wprintf(L"IPPROTO_TCP (TCP)");
break;
case IPPROTO_UDP:
wprintf(L"IPPROTO_UDP (UDP)");
break;
case IPPROTO_ICMPV6:
wprintf(L"IPPROTO_ICMPV6 (ICMP Version 6)");
break;
default:
wprintf(L"Other");
break;
}
wprintf(L" (%d)\n", iProtocol);
wprintf(L" Flags = ");
if (dwFlags & WSA_FLAG_OVERLAPPED)
wprintf(L" WSA_FLAG_OVERLAPPED");
if (dwFlags & WSA_FLAG_MULTIPOINT_C_ROOT)
wprintf(L" WSA_FLAG_MULTIPOINT_C_ROOT");
if (dwFlags & WSA_FLAG_MULTIPOINT_C_LEAF)
wprintf(L" WSA_FLAG_MULTIPOINT_C_LEAF");
if (dwFlags & WSA_FLAG_MULTIPOINT_D_ROOT)
wprintf(L" WSA_FLAG_MULTIPOINT_D_ROOT");
if (dwFlags & WSA_FLAG_MULTIPOINT_D_LEAF)
wprintf(L" WSA_FLAG_MULTIPOINT_D_LEAF");
if (dwFlags & WSA_FLAG_ACCESS_SYSTEM_SECURITY)
wprintf(L" WSA_FLAG_ACCESS_SYSTEM_SECURITY");
#ifdef WSA_FLAG_NO_HANDLE_INHERIT
if (dwFlags & WSA_FLAG_NO_HANDLE_INHERIT)
wprintf(L" WSA_FLAG_NO_HANDLE_INHERIT");
#endif
wprintf(L" (0x%x)\n" , dwFlags);
sock = WSASocket(iFamily, iType, iProtocol, NULL, 0, dwFlags);
if (sock == INVALID_SOCKET)
wprintf(L"WSASocket function failed with error = %d\n", WSAGetLastError() );
else {
wprintf(L"WSASocket function succeeded\n");
// Close the socket to release the resources associated
// Normally an application calls shutdown() before closesocket
// to disables sends or receives on a socket first
// This isn't needed in this simple sample
iResult = closesocket(sock);
if (iResult == SOCKET_ERROR) {
wprintf(L"closesocket function zfailed with error = %d\n", WSAGetLastError() );
WSACleanup();
return 1;
}
}
WSACleanup();
return 0;
}
Windows Phone 8:WSASocketW 関数は、Windows Phone 8 以降のWindows Phone ストア アプリでサポートされています。
Windows 8.1およびWindows Server 2012 R2: WSASocketW 関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。
注意
winsock2.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして WSASocket を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1、 Windows Vista [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winsock2.h |
Library | Ws2_32.lib |
[DLL] | Ws2_32.dll |