Compartir a través de


Función WSARecvDisconnect (winsock2.h)

La función WSARecvDisconnect finaliza la recepción en un socket y recupera los datos de desconexión si el socket está orientado a la conexión.

Sintaxis

int WSAAPI WSARecvDisconnect(
  [in]  SOCKET   s,
  [out] LPWSABUF lpInboundDisconnectData
);

Parámetros

[in] s

Descriptor que identifica un socket.

[out] lpInboundDisconnectData

Puntero a los datos de desconexión entrantes.

Valor devuelto

Si no se produce ningún error, WSARecvDisconnect devuelve cero. De lo contrario, se devuelve un valor de SOCKET_ERROR y se puede recuperar un código de error específico llamando a WSAGetLastError.

Código de error Significado
WSANOTINITIALISED
Debe producirse una llamada de WSAStartup correcta antes de usar esta función.
WSAENETDOWN
Error en el subsistema de red.
WSAEFAULT
El búfer al que hace referencia el parámetro lpInboundDisconnectData es demasiado pequeño.
WSAENOPROTOOPT
La familia de protocolos indicado no admite los datos de desconexión. Tenga en cuenta que las implementaciones de TCP/IP que no admiten datos de desconexión no son necesarias para devolver el código de error WSAENOPROTOOPT. Consulte la sección de comentarios para obtener información sobre la implementación de Microsoft de TCP/IP.
WSAEINPROGRESS
Una llamada de Bloqueo de Windows Sockets 1.1 está en curso o el proveedor de servicios sigue procesando una función de devolución de llamada.
WSAENOTCONN
El socket no está conectado (solo sockets orientados a la conexión).
WSAENOTSOCK
El descriptor no es un socket.

Comentarios

La función WSARecvDisconnect se usa en sockets orientados a la conexión para deshabilitar la recepción y recuperar los datos de desconexión entrantes de la entidad remota. Esto equivale a un apagado (SD_RECEIVE), excepto que WSARecvDisconnect también permite la recepción de datos de desconexión (en protocolos que lo admiten).

Una vez que esta función se haya emitido correctamente, no se permitirán las recepciones posteriores en el socket. Llamar a WSARecvDisconnect no tiene ningún efecto en las capas de protocolo inferior. En el caso de los sockets TCP, si todavía hay datos en cola en el socket que esperan recibirse, o los datos llegan posteriormente, se restablece la conexión, ya que los datos no se pueden entregar al usuario. Para UDP, se aceptan y ponen en cola los datagramas entrantes. En ningún caso se generará un paquete de error ICMP.

Nota La implementación nativa de TCP/IP en Windows no admite datos de desconexión. Los datos de desconexión solo se admiten con los proveedores de Windows Sockets que tienen la marca XP1_DISCONNECT_DATA en su estructura de WSAPROTOCOL_INFO . Use la función WSAEnumProtocols para obtener estructuras de WSAPROTOCOL_INFO para todos los proveedores instalados.
 
Para recibir correctamente los datos de desconexión entrantes, una aplicación debe usar otros mecanismos para determinar que el circuito se ha cerrado. Por ejemplo, una aplicación debe recibir una notificación de FD_CLOSE, recibir un valor devuelto cero o recibir un código de error WSAEDISCON o WSAECONNRESET de recv/WSARecv.

La función WSARecvDisconnect no cierra el socket y los recursos conectados al socket no se liberarán hasta que se invoque closesocket .

La función WSARecvDisconnect no se bloquea independientemente de la configuración de SO_LINGER en el socket.

Una aplicación no debe depender de poder reutilizar un socket después de que se haya desconectado mediante WSARecvDisconnect. En concreto, no es necesario que un proveedor de Windows Sockets admita el uso de connect o WSAConnect en dicho socket.

Nota Al emitir una llamada de Winsock de bloqueo, como WSARecvDisconnect, Winsock puede necesitar esperar un evento de red antes de que se pueda completar la llamada. Winsock realiza una espera alertable en esta situación, que se puede interrumpir mediante una llamada de procedimiento asincrónica (APC) programada en el mismo subproceso. La emisión de otra llamada winsock de bloqueo dentro de un APC que interrumpió una llamada de Winsock de bloqueo en curso en el mismo subproceso provocará un comportamiento indefinido y los clientes winsock nunca deben intentarlo.
 

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winsock2.h
Library Ws2_32.lib
Archivo DLL Ws2_32.dll

Consulte también

WSAConnect

WSAEnumProtocols

WSAGetLastError

WSAPROTOCOL_INFO

WSARecv

Funciones winsock

Referencia de Winsock

closesocket

connect

socket