WSASocketW

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
URLhttps://github.com/inovia/IronHSP
備考Win32 API の ws2_32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_ws2_32_gen2.hs