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