WSAAccept

WSAAccept 関数は、条件関数の戻り値に基づいて接続を条件付きで受理し、QoS フロー仕様を指定し、接続データの受け渡しを可能にする。

WSAAccept s, addr, addrlen, lpfnCondition, dwCallbackData

s : [int] listen 関数の呼び出し後に接続を待ち受けているソケットを識別するディスクリプタ。
addr : [var] 通信層から見た接続元エンティティのアドレスを受け取る sockaddr 構造体へのオプションのポインタ。addr パラメータの正確な形式は、ソケット生成時に確立されたアドレスファミリによって決まる。
addrlen : [var] addr パラメータが指す sockaddr 構造体の長さ (バイト単位) を格納する整数へのオプションのポインタ。
lpfnCondition : [int] パラメータとして渡された呼び出し元情報に基づいて受理・拒否を判定し、必要に応じてこの関数の結果パラメータ g に適切な値を設定することでソケットグループを生成または参加するかを判定する、アプリケーションが指定するオプションの条件関数のアドレス。このパラメータが NULL の場合、条件関数は呼び出されない。
dwCallbackData : [int] アプリケーションが指定した条件関数に、その dwCallbackData パラメータの値として渡し戻されるコールバックデータ。このパラメータは lpfnCondition パラメータが NULL でない場合のみ有効である。Windows Sockets はこのパラメータを解釈しない。

(プラグイン / モジュール : ws2_32.dll)

解説

WSAAccept 関数は、条件関数の戻り値に基づいて接続を条件付きで受理し、QoS
フロー仕様を指定し、接続データの受け渡しを可能にする。

[戻り値]
エラーがない場合、WSAAccept は受理したソケットのディスクリプタとして SOCKET 型の値を返す。そうでない場合は
INVALID_SOCKET が返され、WSAGetLastError を呼び出すことで特定のエラーコードを取得できる。addrlen
が参照する整数には、初期値として addr が指す領域の大きさが格納されている。戻り時には、返されたアドレスの実際の長さ (バイト単位)
が格納される。
(以下省略)

[備考]
WSAAccept 関数は、ソケット s の保留中接続キューの先頭から最初の接続を取り出し、条件関数が指定されている (NULL でない)
場合はそれに照らして確認する。条件関数が CF_ACCEPT を返した場合、WSAAccept
は新しいソケットを生成する。新たに生成されたソケットは、WSAAsyncSelectWSAEventSelect
で登録された非同期イベントを含め、元のソケット s と同じプロパティを持つ。条件関数が CF_REJECT
を返した場合、WSAAccept
は接続要求を拒否する。条件関数は本関数と同じスレッド内で実行されるため、できるだけ速やかに戻るべきである。判定を即座に行えない場合、条件関数は
CF_DEFER
を返して判定が未決であり、サービスプロバイダはこの接続要求に対して何もしないことを示すべきである。アプリケーションが接続要求への対応準備が整ったら、再度
WSAAccept を呼び出し、条件関数の戻り値として CF_ACCEPT か CF_REJECT のどちらかを返せばよい。既定モード
(ブロッキング) のソケットでは、キューに保留接続がない状態で WSAAccept
が呼び出されると、接続が到着するまでブロックする。ノンブロッキングモードのソケットでは、キューに保留接続がない状態で WSAAccept
を呼び出すと WSAEWOULDBLOCK エラーで失敗する。WSAAccept
が成功して新しいソケットハンドルを返した後、受理したソケットを使ってさらに接続を受理することはできない。元のソケットはオープンのままで新しい接続要求をリッスンし続ける。addr
パラメータは結果パラメータで、通信層から見た接続元エンティティのアドレスが格納される。addr
パラメータの正確な形式は通信が行われるアドレスファミリによって決まる。addrlen は入出力両用のパラメータで、初期値として addr
が指す領域の大きさを格納しておく必要がある。関数から戻ると、返されたアドレスの実際の長さ (バイト単位) が格納される。この呼び出しは
SOCK_STREAM のような接続指向ソケットで使用される。addr や addrlen が NULL
の場合、受理したソケットのリモートアドレスに関する情報は返されない。それ以外の場合、接続が正常に受理されれば両パラメータに情報が格納される。条件関数のプロトタイプは、Winsock2.h
ヘッダファイルで LPCONDITIONPROC として次のように定義されている。
(以下省略)

情報

プラグイン / モジュール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