次の方法で共有


CAsyncSocket::ReceiveFrom

データグラムを受け取り、SOCKADDR の構造または rSocketAddressでソース アドレスを格納するには、このメンバー関数を呼び出します。

int ReceiveFrom(
   void* lpBuf,
   int nBufLen,
   CString& rSocketAddress,
   UINT& rSocketPort,
   int nFlags = 0 
);
int ReceiveFrom(
   void* lpBuf,
   int nBufLen,
   SOCKADDR* lpSockAddr,
   int* lpSockAddrLen,
   int nFlags = 0 
);

パラメーター

  • lpBuf
    受信データのバッファー。

  • nBufLen
    バイト lpBuf の長さ。

  • rSocketAddress
    ドット数を打たれた IP アドレスを受け取る CString のオブジェクトへの参照。

  • rSocketPort
    ポートを格納 uint への参照。

  • lpSockAddr
    は、ソース アドレスを保持 SOCKADDR の構造体へのポインター。

  • lpSockAddrLen
    バイト lpSockAddr のソース アドレスの長さへのポインター。

  • nFlags
    呼び出しが行われる方法を指定します。この関数のセマンティクスは、ソケットの nFlags のオプションおよびパラメーターによって決まります。後者は、C++ OR 演算子では、次の値を組み合わせることによって構成されます:

    • 受信データのMSG_PEEK かのピーク。データは、バッファーにコピーしますが、入力キューから削除されません。

    • MSG_OOB プロセスの帯域外のデータ。

戻り値

エラーが発生しなかった場合は、ReceiveFrom で送受信されたバイト数を返します。接続が閉じている場合は、0 を返します。それ以外 SOCKET_ERROR の戻り値は、特定のエラー コードは GetLastErrorを呼び出して取得できます。このエラーは、次のメンバー関数に適用されます:

  • WSANOTINITIALISED は正常に AfxSocketInit は、この API を使用する前に行う必要があります。

  • WSAENETDOWN は、Windows ソケット実装ネットワークのサブシステムが失敗したことを検出しました。

  • WSAEFAULTlpSockAddrLen の引数が無効です: lpSockAddr のバッファーは、ピアのアドレスを格納できない場合小さかったです。

  • WSAEINPROGRESS A のブロックの Windows ソケット処理は進行中です。

  • WSAEINVAL は **[バインド]**とソケット バインドされていません。

  • WSAENOTCONN は、ソケット接続されていません (SOCK_STREAM のみ)。

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

  • WSAEOPNOTSUPP   MSG_OOB が指定されましたが、ソケットは型 SOCK_STREAMではありません。

  • WSAESHUTDOWN は、ソケット シャットダウン; ShutDown が 0 または 2.に nHow 設定すると、開始後にソケット ReceiveFrom を呼び出すことはできません。

  • WSAEWOULDBLOCK はブロッキング ソケットとしてマークされ、ReceiveFrom 操作はブロックされます。

  • WSAEMSGSIZE は、データグラム指定したバッファーに収まらない場合は大きすぎて、切り捨てられました。

  • WSAECONNABORTED は、仮想行タイムアウト中止またはそのほかのエラーが原因です。

  • WSAECONNRESET は、リモート側によって仮想行リセットされています。

解説

この関数が受信データをオブジェクト (ソケット接続など) で読み込み、データが送信アドレスをキャプチャするために使用されます。

IPv6 のアドレスを処理するには、CAsyncSocket::ReceiveFromExを使用します。

SOCK_STREAMのソケットに、指定されたバッファーのサイズまで現在利用できるだけ多くの情報が返されます。ソケットが帯域外 (ソケット データの選択 SO_OOBINLINE) のインライン表示用に構成され、帯域外のデータは、帯域外のデータのみが返されます、未読です。アプリケーションは、帯域外のデータを読み込むことがあるかどうかを確認するに IOCtlSIOCATMARK オプションまたは OnOutOfBandData を使用できます。lpSockAddr と lpSockAddrLen のパラメーターは SOCK_STREAM のソケットに無視されます。

データグラム ソケットに、データは指定したバッファーのサイズまで最初の登録、データグラムから配置されます。データグラムが指定されたバッファーを超える場合は、メッセージ バッファーの最初の部分で塗りつぶされます、特別なデータは、WSAEMSGSIZEへの ReceiveFrom の設定を返すエラー コードの SOCKET_ERROR 失われの値。

lpSockAddr が非ゼロで、ソケットで SOCK_DGRAM型の場合、SOCKADDR の対応する構造体へのデータを送信ソケットのネットワーク アドレスはコピーされません。lpSockAddrLen が指す値がこの構造体のサイズに初期化され、制御が返されるときに、に格納されているアドレスの実際のサイズを変更します。ソケットで受信データが使用できない場合、ReceiveFrom の呼び出しがブロックされないは、ソケットである到着するデータを待機します。この場合、SOCKET_ERROR の値は WSAEWOULDBLOCKに設定されているエラー コードが返されます。OnReceive のコールバックがより多くのデータがいつ到着かを確認するために使用できます。

ソケットで SOCK_STREAM 型であり、リモート側が接続を適切に締めたら、ReceiveFrom は、受け取った 0 バイトと直ちに完了します。

必要条件

Header: afxsock.h

参照

関連項目

CAsyncSocket クラス

階層図

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::Send