CAsyncSocket::ReceiveFrom

int ReceiveFrom ( void * lpBuf, int nBufLen, CStringamp; rSocketAddress, UINT & rSocketPort, int nFlags = 0 );

int ReceiveFrom ( void * lpBuf, int nBufLen, SOCKADDR * lpSockAddr, int * lpSockAddrLen, int nFlags = 0 );

Valor devuelto

Si se produce ningún error, ReceiveFrom devuelve el número de bytes recibidos. Si la conexión ha sido cerrada, devuelve 0. De lo contrario, se devuelve un valor de SOCKET_ERROR y un código de error específico puede ser obtenido llamando GetLastError. Los errores siguientes se aplican a esta función miembro:

Parámetros

lpBuf

Un búfer para los datos entrantes.

nBufLen

La longitud de lpBuf en bytes.

rSocketAddress

Referencia a un objeto CString que recibe una dirección IP número punteada.

rSocketPort

Referencia a un UINT que almacena un puerto.

lpSockAddr

Un puntero a una estructura SOCKADDR que contiene la dirección de origen a su regreso.

lpSockAddrLen

Un puntero a la longitud de la dirección de origen en lpSockAddr en bytes.

nFlags

Especifica la forma en que se realiza la llamada. La semántica de esta función está determinada por las opciones de socket y el parámetro nFlags . Este último se construye mediante la combinación de cualquiera de los siguientes valores con el operador C++ o:

Observaciones

Llame a esta función miembro para recibir un datagrama y almacenar la dirección de origen en la estructura SOCKADDR o en rSocketAddress. Esta función se utiliza para leer los datos entrantes en un socket (posiblemente conectado) y capturar la dirección desde la que se envían los datos.

Para sockets de tipo SOCK_STREAM, tanta información como está actualmente disponible hasta el tamaño del búfer suministrado es devuelto. Si ha configurado el socket para recepción en línea de datos fuera de banda (opción de socket SO_OOBINLINE) y datos fuera de banda no leídos, se devolverá únicamente los datos fuera de banda. La aplicación puede utilizar la opción de IOCtl SIOCATMARK o OnOutOfBandData para determinar si sigue siendo cualquier dato más fuera de banda para ser leído. Se omiten los parámetros lpSockAddr y lpSockAddrLen para SOCK_STREAM sockets.

Para sockets de datagramas, se extraen datos del primer datagrama de cola, hasta el tamaño del búfer suministrado. Si el datagrama es mayor que el búfer suministrado, el búfer se rellena con la primera parte del mensaje, se pierden los datos exceso y ReceiveFrom devuelve un valor de SOCKET_ERROR con el código de error establecido en WSAEMSGSIZE.

Si lpSockAddr es distinto de cero, y el zócalo es de tipo SOCK_DGRAM, se copia la dirección del socket que envía los datos a la estructura SOCKADDR correspondiente. El valor apuntado por lpSockAddrLen se inicializa con el tamaño de esta estructura y es por última vez el regreso para indicar el tamaño real de la dirección almacenada allí. Si no hay datos entrantes están disponibles en el zócalo, la llamada ReceiveFrom espera datos llegar a menos que el zócalo es bloqueos. En este caso, se devuelve un valor de SOCKET_ERROR con el código de error establecido en WSAEWOULDBLOCK. La devolución de llamada de OnReceive puede utilizarse para determinar cuándo llegan más datos.

Si el zócalo es de tipo SOCK_STREAM y el lado remoto ha cerrado la conexión correctamente, un ReceiveFrom finalizará inmediatamente con 0 bytes recibidos.

Introducción a CAsyncSocket |nbsp; Miembros de clase | Diagrama de jerarquía

Vea tambié&nnbsp;CAsyncSocket::AsyncSelect, CAsyncSocket::Create, CAsyncSocket::Receive, CAsyncSocket::Send

Index