次の方法で共有


CAsyncSocket::OnConnect

接続の試みが完了するこの接続のソケットを通知するためにフレームワークによって、正常またはエラーで呼び出されます。

virtual void OnConnect(
   int nErrorCode 
);

パラメーター

  • nErrorCode
    ソケットの最新のエラー。次のエラー コードは OnConnect のメンバー関数に適用されます:

    • 0 正常に実行される関数。

    • WSAEADDRINUSE は、指定したアドレス既に使用されています。

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

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

    • WSAECONNREFUSED は接続しようとすると力強く拒否されています。

    • WSAEDESTADDRREQ A の目的のアドレスは必須です。

    • WSAEFAULTlpSockAddrLen の引数は不適切です。

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

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

    • WSAEMFILE にこれ以上のファイル記述子使用できません。

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

    • WSAENOBUFS バッファー領域は使用できません。ソケット接続はできません。

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

    • WSAENOTSOCK はファイル記述子ソケットではありません。

    • WSAETIMEDOUT は、接続を確立せずに接続しようとすると時間を The operation has timed out

解説

[!メモ]

CSocketでは、OnConnect 通知関数は決して呼び出されません。接続の場合、接続が完了したときに返す [接続]を呼び出し、正常に (またはエラーの場合)。接続通知を処理または 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);
}

必要条件

Header: afxsock.h

参照

関連項目

CAsyncSocket クラス

階層図

CAsyncSocket::Connect

CAsyncSocket::GetLastError

CAsyncSocket::OnAccept

CAsyncSocket::OnClose

CAsyncSocket::OnOutOfBandData

CAsyncSocket::OnReceive

CAsyncSocket::OnSend