Compartir a través de


CAsyncSocket::Receive

Llame a esta función miembro para recibir datos de un socket.

virtual int Receive(
   void* lpBuf,
   int nBufLen,
   int nFlags = 0 
);

Parámetros

  • lpBuf
    un búfer para los datos entrantes.

  • nBufLen
    la longitud de lpBuf en bytes.

  • nFlags
    Especifica la manera en que se realiza la llamada.La semántica de esta función viene determinada por las opciones de socket y el parámetro de nFlags .El último es construido combinando cualquiera de los valores siguientes con el operador de C++ OR :

    • MSG_PEEK Peek en los datos entrantes.Los datos se copia en el búfer pero no se quita de la cola de entrada.

    • Datos fuera de banda deMSG_OOB .

Valor devuelto

Si no se produce ningún error, Recibir devuelve el número de bytes recibidos.Si se ha cerrado la conexión, devuelve 0.Si no, un valor de SOCKET_ERROR se devuelve, y un código de error específico puede recuperar llamando a GetLastError.Los errores siguientes se aplican a esta función miembro:

  • WSANOTINITIALISED A AfxSocketInit correcto debe aparecer antes de utilizar esta API.

  • La implementación de Windows Sockets deWSAENETDOWN The detectó que produjo el subsistema de la red.

  • El socket deWSAENOTCONN no está conectado.

  • La operación de Windows Sockets de bloqueo deWSAEINPROGRESS A está en curso.

  • WSAENOTSOCK El descriptor no es un socket.

  • WSAEOPNOTSUPP   MSG_OOB se especificó, pero el socket no es de SOCK_STREAMescrito.

  • Se cierra el socket deWSAESHUTDOWN The; no es posible llamar a Recibir en un socket después de que ShutDown invocarlo con nHow establecido en 0 o 2.

  • El socket deWSAEWOULDBLOCK The se marca como sin bloquear y la operación de Recibir bloquearía.

  • El datagrama deWSAEMSGSIZE The es demasiado grande caber en el búfer especificado y se ha truncado.

  • El socket deWSAEINVAL no se ha enlazado con Enlazar.

  • El circuito virtual deWSAECONNABORTED The era anulado debido al tiempo de espera u otro error.

  • El circuito virtual deWSAECONNRESET Se ha restablecido por el lado remoto.

Comentarios

Esta función se utiliza para sockets conectados de secuencia o de datagrama y se utiliza para leer datos entrantes.

Para los sockets de SOCK_STREAMcon tipo, se devuelve tanta información como está disponible actualmente hasta el tamaño del búfer proporcionado.Si el socket se ha configurado para la recepción entre líneas de datos fuera de banda (opción SO_OOBINLINEde socket) y los datos fuera de banda es no leídos, solo los datos fuera de banda se devolverán.La aplicación puede utilizar la opción o OnOutOfBandData de IOCtlSIOCATMARK de determinar si queda más datos fuera de banda leerse.

Para los sockets de datagrama, los datos se extraen del primer datagrama enviado a la cola, hasta el tamaño del búfer proporcionado.Si el datagrama es mayor que el búfer proporcionado, el búfer se rellena con la primera parte del datagrama, se pierde exceso de datos, y retornos de Recibir un valor de SOCKET_ERROR con el código de error establecido en WSAEMSGSIZE.Si no hay datos entrantes disponibles en el socket, un valor de SOCKET_ERROR se devuelve con el código de error establecido en WSAEWOULDBLOCK.La función de devolución de llamada de OnReceive se puede utilizar para determinar cuando es más datos.

Si el socket es de SOCK_STREAM escrito y el lado remoto ha cerrado la conexión correctamente, Recibir completará inmediatamente con los bytes 0 recibidos.Si se ha restablecido la conexión, Recibir producirá el error WSAECONNRESET.

Recibir se debe llamar a una vez para cada vez que se llama a CAsyncSocket::OnReceive .

Ejemplo

Vea el ejemplo para CAsyncSocket:: OnReceive.

Requisitos

encabezado: afxsock.h

Vea también

Referencia

Clase de CAsyncSocket

Gráfico de jerarquía

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send