CAsyncSocket::Receive
ソケットからデータを受け取るには、このメンバー関数を呼び出します。
virtual int Receive(
void* lpBuf,
int nBufLen,
int nFlags = 0
);
パラメーター
lpBuf
受信データのバッファー。nBufLen
バイト lpBuf の長さ。nFlags
呼び出しが行われる方法を指定します。この関数のセマンティクスは、ソケットの nFlags のオプションおよびパラメーターによって決まります。後者は、C++ OR 演算子では、次の値を組み合わせることによって構成されます:受信データのMSG_PEEK かのピーク。データは、バッファーにコピーしますが、入力キューから削除されません。
MSG_OOB プロセスの帯域外のデータ。
戻り値
エラーが発生しなかった場合は、[受信] で送受信されたバイト数を返します。接続が閉じている場合は、0 を返します。それ以外 SOCKET_ERROR の戻り値は、特定のエラー コードは GetLastErrorを呼び出して取得できます。このエラーは、次のメンバー関数に適用されます:
WSANOTINITIALISED は正常に AfxSocketInit は、この API を使用する前に行う必要があります。
WSAENETDOWN は、Windows ソケット実装ネットワークのサブシステムが失敗したことを検出しました。
WSAENOTCONN は、ソケット接続されていません。
WSAEINPROGRESS A のブロックの Windows ソケット処理は進行中です。
WSAENOTSOCK は記述子ソケットではありません。
WSAEOPNOTSUPP MSG_OOB が指定されましたが、ソケットは型 SOCK_STREAMではありません。
WSAESHUTDOWN は、ソケット シャットダウン; ShutDown が 0 または 2.に nHow 設定すると、開始後にソケット [受信] を呼び出すことはできません。
WSAEWOULDBLOCK はブロッキング ソケットとしてマークされ、[受信] 操作はブロックされます。
WSAEMSGSIZE は、データグラム指定したバッファーに収まらない場合は大きすぎて、切り捨てられました。
WSAEINVAL は **[バインド]**とソケット バインドされていません。
WSAECONNABORTED は、仮想行タイムアウト中止またはそのほかのエラーが原因です。
WSAECONNRESET は、リモート側によって仮想行リセットされています。
解説
接続されたデータグラムまたはストリーム ソケットにこの関数を使用する場合、受信データを読み取るために使用されます。
型 SOCK_STREAMのソケットに、指定されたバッファーのサイズまで現在利用できるだけ多くの情報が返されます。ソケットが帯域外 (ソケット データの選択 SO_OOBINLINE) のインライン表示用に構成され、帯域外のデータは、帯域外のデータのみが返されます、未読です。アプリケーションは、帯域外のデータを読み込むことがあるかどうかを確認するに IOCtlSIOCATMARK オプションまたは OnOutOfBandData を使用できます。
データグラム ソケットに、データは指定したバッファーのサイズまで最初の登録、データグラムから配置されます。データグラムが指定されたバッファーよりも大きい場合は、バッファー データグラムの最初の部分で塗りつぶされます、特別なデータは、WSAEMSGSIZEへの [受信] の設定を返すエラー コードの SOCKET_ERROR 失われの値。ソケットで受信データが使用できない場合、SOCKET_ERROR の値は WSAEWOULDBLOCKに設定されているエラー コードが返されます。OnReceive のコールバック関数はより多くのデータがいつ到着かを確認するために使用できます。
ソケットで SOCK_STREAM 型であり、リモート側が接続を適切に締めたら、[受信] は、受け取った 0 バイトと直ちに完了します。接続がリセットされた場合は、[受信] は WSAECONNRESETエラーで失敗します。
[受信] は一度だけ CAsyncSocket::OnReceive が呼び出されるたびに呼び出されます。
使用例
CAsyncSocket::OnReceiveの例を参照してください。
必要条件
Header: afxsock.h