次の方法で共有


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

参照

参照

CAsyncSocket クラス

階層図

CAsyncSocket::Bind

CAsyncSocket::Connect

CAsyncSocket::Listen

CAsyncSocket::Create

WSAAsyncSelect

その他の技術情報

CAsyncSocket のメンバ