WSASocket 関数は、特定のトランスポートサービスプロバイダにバインドされたソケットを作成する。(Unicode)
WSASocketW af, type, protocol, lpProtocolInfo, g, dwFlags
af : [int] アドレスファミリ指定。可能な値は Winsock2.h に定義されている。Windows Vista 以降向け SDK ではヘッダ構成が変更され、可能な値は Ws2def.h に定義されている。Ws2def.h は Winsock2.h に自動的にインクルードされるため、直接使うべきではない。現在サポートされている値は AF_INET または AF_INET6 で、これらはそれぞれ IPv4 と IPv6 のインターネットアドレスファミリ形式である。そのアドレスファミリの Winsock サービスプロバイダがインストールされていれば、他のアドレスファミリ (NetBIOS 用の AF_NETBIOS など) もサポートされる。AF_ アドレスファミリ定数と PF_ プロトコルファミリ定数の値は同一なので (例: AF_INET と PF_INET)、どちらの定数を使ってもよい。次の表は一般的な値を示すが、他にも多くの値が存在しうる。 type : [int] 新規ソケットの種別。 protocol : [int] 使用するプロトコル。指定可能な値はアドレスファミリとソケット種別に依存し、Winsock2.h と Wsrm.h に定義されている。Windows Vista 以降向け SDK ではヘッダ構成が変更され、Ws2def.h に定義された IPPROTO 列挙型の値から指定できる。Ws2def.h は Winsock2.h に自動的にインクルードされるため、直接使うべきではない。0 を指定するとプロトコル指定なしを意味し、サービスプロバイダが使用するプロトコルを選択する。 lpProtocolInfo : [var] 作成するソケットの特性を定義する WSAPROTOCOL_INFO 構造体へのポインタ。NULL でなければ、ソケットは指定された WSAPROTOCOL_INFO に関連付けられたプロバイダにバインドされる。 g : [int] 既存のソケットグループ ID、または新規ソケットと新規ソケットグループを作るときの適切なアクション。g が既存のソケットグループ ID であれば、そのグループの要件を満たす限り新しいソケットはそのソケットグループに参加する。そうでない場合は次の値が指定できる。 dwFlags : [int] ソケットの追加属性を指定するフラグ集合。組み合わせ可能だが、一部は許可されない。
(プラグイン / モジュール : ws2_32.dll)
WSASocket 関数は、特定のトランスポートサービスプロバイダにバインドされたソケットを作成する。(Unicode) [戻り値] エラーがない場合、WSASocket は新しいソケットを参照する記述子を返す。そうでない場合は INVALID_SOCKET を返し、WSAGetLastError で特定のエラーコードを取得できる。注: このエラーコードの説明は Microsoft 独自のものである。 このドキュメントは省略されている。 [備考] WSASocket 関数はソケット記述子とそれに関連するリソースを割り当て、トランスポートサービスプロバイダに関連付ける。ほとんどのソケットは dwFlags に WSA_FLAG_OVERLAPPED 属性を指定して作成すべきである。この属性付きソケットはより高性能なオーバーラップ I/O をサポートする。WSASocket でソケットを作成する場合、既定ではこのオーバーラップ属性は付かない。一方、socket 関数で作成したソケットは既定でオーバーラップ I/O をサポートする。lpProtocolInfo が NULL の場合、Winsock は af、type、protocol で要求された組み合わせをサポートする最初のトランスポートサービスプロバイダを使用する。NULL でない場合、ソケットは指定された WSAPROTOCOL_INFO に関連付けられたプロバイダにバインドされる。この場合、af、type、protocol のいずれかに FROM_PROTOCOL_INFO を指定することで、WSAPROTOCOL_INFO 構造体の対応値 (iAddressFamily、iSocketType、iProtocol) を使うことを意味する。いずれにせよ、af、type、protocol に指定した値は変更されずにトランスポートサービスプロバイダへ渡される。af、type、protocol に基づいてプロトコルとサポートするサービスプロバイダを選択する際、この手順はベースプロトコルまたはプロトコルチェーンのみを選び、プロトコル層単独は選ばない。チェーン化されていないプロトコル層は type や af について部分一致とも見なさず、適切なプロトコルが見つからないときに WSAEAFNOSUPPORT や WSAEPROTONOSUPPORT を返すこともない。注: AF_UNSPEC 定数は引き続きヘッダに定義されているが、protocol 引数の解釈が曖昧になるため使用は強く推奨しない。アプリケーションは af に AF_INET6 を指定して IPv4 と IPv6 の両方で使えるデュアルモードソケットを作ることが推奨される。WSASocket で作成したソケットで SO_RCVTIMEO や SO_SNDTIMEO を正しく機能させるには、dwFlags に WSA_FLAG_OVERLAPPED を設定しなければならない。そうでなければタイムアウトはソケットに反映されない。SOCK_STREAM のようなコネクション指向ソケットは全二重接続を提供し、データ送受信前に接続状態でなければならない。接続は connect または WSAConnect で確立する。接続後は send/WSASend、recv/WSARecv でデータを転送できる。セッション終了時は closesocket でソケット資源を解放する。コネクション指向ソケットの場合、closesocket 前に shutdown でデータ転送を停止すべきである。信頼性のあるコネクション指向ソケットの通信プロトコルはデータの喪失・重複を防ぐ。相手のバッファに入るはずのデータを妥当な時間内に送信できなかった場合、接続は切れたと見なされ以降の呼び出しは WSAETIMEDOUT で失敗する。コネクションレスのメッセージ指向ソケットは sendto/WSASendTo と recvfrom/WSARecvFrom で任意のピアとデータグラムを送受信できる。特定のピアに接続しておけば、そのピアに対しては send/WSASend で送信、recv/WSARecv で受信が可能になる。SOCK_RAW のサポートは必須ではないが、可能ならサポートすることが推奨される。WSASocket はサービス用に使うソケットを作成する用途にも使える。別のソケットが同じポートにバインドしようとすると監査レコードが生成される。そのためには次の手順が必要である。 このドキュメントは省略されている。
| プラグイン / モジュール | ws2_32.dll |
| バージョン | 1.0 |
| 作成日 | 2026/04/16 |
| 著作者 | IronHSP / CsWin32 bridge |
| URL | https://github.com/inovia/IronHSP |
| 備考 | Win32 API の ws2_32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。 |
| タイプ | 拡張命令 |
| グループ | Win32API |
| 対応環境 |
|
| hs ファイル | hsphelp\win32_ws2_32_gen2.hs |