CAsyncSocket::OnConnect

更新 : 2007 年 11 月

接続が正常終了したか、エラー終了したかにかかわらず、接続の試みが完了したことを接続しようとしているソケットに通知するために、フレームワークが呼び出します。

virtual void OnConnect(
   int nErrorCode 
);

パラメータ

  • nErrorCode
    ソケットでの直前のエラー。OnConnect メンバ関数では、次のエラー コードが発生します。

    • 0   関数は正常に実行されました。

    • WSAEADDRINUSE   指定したアドレスは使用中です。

    • WSAEADDRNOTAVAIL   指定したアドレスはローカル コンピュータからは利用できません。

    • WSAEAFNOSUPPORT   指定したファミリのアドレスはこのソケットでは使用できません。

    • WSAECONNREFUSED   接続を試みましたが、強制的に拒否されました。

    • WSAEDESTADDRREQ   宛先アドレスが必要です。

    • WSAEFAULT   引数 lpSockAddrLen が不正です。

    • WSAEINVAL   ソケットは既にアドレスにバインドされています。

    • WSAEISCONN   ソケットは既に接続されています。

    • WSAEMFILE   利用できるファイル記述子がありません。

    • WSAENETUNREACH   現時点では、このホストからネットワークに到達できません。

    • WSAENOBUFS   利用できるバッファ領域がありません。ソケットは接続できません。

    • WSAENOTCONN   ソケットが接続されていません。

    • WSAENOTSOCK   記述子はソケットではなく、ファイルです。

    • WSAETIMEDOUT   接続を試みましたが、タイムアウトしました。接続は確立していません。

解説

xfaaxdxe.alert_note(ja-jp,VS.90).gifメモ :

CSocket では、通知関数 OnConnect が呼び出されることはありません。接続するには Connect を呼び出してください。この関数は、接続が完了したときに (成功しても失敗しても) 戻ります。接続通知の処理方法は、MFC の実装の細部に関係します。

詳細については、「Windows ソケット : ソケット通知」を参照してください。

使用例

void CMyAsyncSocket::OnConnect(int nErrorCode)   // CMyAsyncSocket is 
                                                 // derived from CAsyncSocket
{
   if (0 != nErrorCode)
   {
      switch(nErrorCode)
      {
         case WSAEADDRINUSE: 
            AfxMessageBox(_T("The specified address is already in use.\n"));
            break;
         case WSAEADDRNOTAVAIL: 
            AfxMessageBox(_T("The specified address is not available from ")
            _T("the local machine.\n"));
            break;
         case WSAEAFNOSUPPORT: 
            AfxMessageBox(_T("Addresses in the specified family cannot be ")
            _T("used with this socket.\n"));
            break;
         case WSAECONNREFUSED: 
            AfxMessageBox(_T("The attempt to connect was forcefully rejected.\n"));
            break;
         case WSAEDESTADDRREQ: 
            AfxMessageBox(_T("A destination address is required.\n"));
            break;
         case WSAEFAULT: 
            AfxMessageBox(_T("The lpSockAddrLen argument is incorrect.\n"));
            break;
         case WSAEINVAL: 
            AfxMessageBox(_T("The socket is already bound to an address.\n"));
            break;
         case WSAEISCONN: 
            AfxMessageBox(_T("The socket is already connected.\n"));
            break;
         case WSAEMFILE: 
            AfxMessageBox(_T("No more file descriptors are available.\n"));
            break;
         case WSAENETUNREACH: 
            AfxMessageBox(_T("The network cannot be reached from this host ")
            _T("at this time.\n"));
            break;
         case WSAENOBUFS: 
            AfxMessageBox(_T("No buffer space is available. The socket ")
               _T("cannot be connected.\n"));
            break;
         case WSAENOTCONN: 
            AfxMessageBox(_T("The socket is not connected.\n"));
            break;
         case WSAENOTSOCK: 
            AfxMessageBox(_T("The descriptor is a file, not a socket.\n"));
            break;
         case WSAETIMEDOUT: 
            AfxMessageBox(_T("The attempt to connect timed out without ")
               _T("establishing a connection. \n"));
            break;
         default:
            TCHAR szError[256];
            _stprintf_s(szError, _T("OnConnect error: %d"), nErrorCode);
            AfxMessageBox(szError);
            break;
      }
      AfxMessageBox(_T("Please close the application"));
   }
   CAsyncSocket::OnConnect(nErrorCode);
}

必要条件

ヘッダー : afxsock.h

参照

参照

CAsyncSocket クラス

階層図

CAsyncSocket::Connect

CAsyncSocket::GetLastError

CAsyncSocket::OnAccept

CAsyncSocket::OnClose

CAsyncSocket::OnOutOfBandData

CAsyncSocket::OnReceive

CAsyncSocket::OnSend

その他の技術情報

CAsyncSocket のメンバ