CAsyncSocket::Accept
更新 : 2007 年 11 月
ソケットでの接続を受け入れます。
virtual BOOL Accept(
CAsyncSocket& rConnectedSocket,
SOCKADDR* lpSockAddr = NULL,
int* lpSockAddrLen = NULL
);
パラメータ
rConnectedSocket
接続できる新しいソケットを識別する参照です。lpSockAddr
SOCKADDR 構造体へのポインタ。この構造体は、ネットワーク上にある既知の、接続するソケットのアドレスを受け取ります。引数 lpSockAddr の実際の形式は、ソケットが作成されたときに確立されるアドレス ファミリによって決まります。lpSockAddr および lpSockAddrLen、またはどちらか一方が NULL のときは、受け入れたソケットのリモート アドレスについての情報は返されません。lpSockAddrLen
lpSockAddr 内のアドレス長へのポインタ。アドレス長はバイト単位です。lpSockAddrLen は、値の受け渡しに使うパラメータです。lpSockAddr が指す領域の大きさを渡し、関数からの戻り時には返されたアドレスの実際の長さをバイト単位で保持します。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。GetLastError を呼び出すと、固有のエラー コードを取得できます。このメンバ関数では、次のエラーが発生します。
WSANOTINITIALISED この API を使う前に AfxSocketInit の呼び出しが正常終了していることが必要です。
WSAENETDOWN Windows ソケットの実装が、ネットワーク サブシステムの異常を検出しました。
WSAEFAULT 引数 lpSockAddrLen が小さすぎます。SOCKADDR 構造体のサイズよりも小さくなっています。
WSAEINPROGRESS 実行中の Windows ソケット呼び出しがブロッキングされています。
WSAEINVAL 受け入れる前に Listen が呼び出されていません。
WSAEMFILE 受け入れるエントリのキューが空で、利用できる記述子がありません。
WSAENOBUFS 利用できるバッファ領域がありません。
WSAENOTSOCK 記述子がソケットではありません。
WSAEOPNOTSUPP 参照しているソケットは、接続指向のサービスをサポートするタイプではありません。
WSAEWOULDBLOCK ソケットは非ブロッキングになっていて、受け入れる接続がありません。
解説
このルーチンは、接続待ちのキューの先頭の接続を取り出し、このソケットと同じプロパティを持つ新しいソケットを作成し、rConnectedSocket に結び付けます。キューに待機中の接続がないときは、Accept は 0 を返します。GetLastError はエラーを返します。受け入れたソケット (rConnectedSocket) は、別の接続の受け入れには使用できません。基のソケットは、オープンで、リスナのままになります。
実行後、パラメータ lpSockAddr には、接続ソケットのアドレスが設定されます。アドレスは、通信層で既知の値です。Accept は、SOCK_STREAM のような接続ベースのソケットで使います。
必要条件
ヘッダー : afxsock.h