Compartir a través de


Función WSACleanup (winsock.h)

La función WSACleanup finaliza el uso del archivo DLL winsock 2 (Ws2_32.dll).

Sintaxis

int WSACleanup();

Valor devuelto

El valor devuelto es cero si la operación se realizó correctamente. De lo contrario, se devuelve el valor SOCKET_ERROR y se puede recuperar un número de error específico mediante una llamada a WSAGetLastError.

En un entorno multiproceso, WSACleanup finaliza las operaciones de Windows Sockets para todos los subprocesos.

Código de error Significado
WSANOTINITIALISED
Debe producirse una llamada WSAStartup correcta antes de usar esta función.
WSAENETDOWN
Error en el subsistema de red.
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.

Comentarios

Se requiere una aplicación o DLL para realizar una llamada WSAStartup correcta antes de poder usar los servicios de Windows Sockets. Cuando haya completado el uso de Windows Sockets, la aplicación o dll debe llamar a WSACleanup para anular el registro de una implementación de Windows Sockets y permitir que la implementación libere los recursos asignados en nombre de la aplicación o dll.

Cuando se llama a WSACleanup , las llamadas de Windows Sockets asincrónicas o de bloqueo pendientes emitidas por cualquier subproceso de este proceso se cancelan sin publicar ningún mensaje de notificación o sin señalar ningún objeto de evento. Las operaciones de envío o recepción superpuestas pendientes (WSASend, WSASendTo, WSARecv o WSARecvFrom con un socket superpuesto, por ejemplo) emitidos por cualquier subproceso de este proceso también se cancelan sin establecer el objeto de evento o invocar la rutina de finalización, si se especificó una. En este caso, se produce un error en las operaciones superpuestas pendientes con el estado de error WSA_OPERATION_ABORTED.

Los sockets abiertos cuando se llamó a WSACleanup se restablecen y desasignan automáticamente como si se llamara a closesocket . Los sockets que se han cerrado con closesocket , pero que todavía tienen datos pendientes que se van a enviar pueden verse afectados cuando se llama a WSACleanup . En este caso, los datos pendientes se pueden perder si el WS2_32.DLL se descarga de la memoria a medida que se cierra la aplicación. Para asegurarse de que se envían todos los datos pendientes, una aplicación debe usar el apagado para cerrar la conexión y, a continuación, esperar hasta que se complete el cierre antes de llamar a closesocket y WSACleanup. Todos los recursos y el estado interno, como los mensajes no publicados o en cola, deben desasignarse para que estén disponibles para el siguiente usuario.

Debe haber una llamada a WSACleanup para cada llamada correcta a WSAStartup. Solo la llamada de función WSACleanup final realiza la limpieza real. Las llamadas anteriores simplemente reducen un recuento de referencias interno en el WS2_32.DLL.

NotaWSACleanup no anula el registro de nombres (nombres del mismo nivel, por ejemplo) que pueden haberse registrado con un proveedor de espacios de nombres de Windows Sockets, como el proveedor de espacios de nombres del Protocolo de resolución de nombres del mismo nivel (PNRP).
 
En Windows Sockets 1.1, intentar llamar a WSACleanup desde dentro de un enlace de bloqueo y, a continuación, no comprobar que el código de retorno era un error de programación común. Si una aplicación winsock 1.1 debe salir mientras una llamada de bloqueo está pendiente, la aplicación tiene que cancelar primero la llamada de bloqueo con WSACancelBlockingCall y, a continuación, emitir la llamada WSACleanup una vez que se haya devuelto el control a la aplicación. En Windows Sockets 2, este problema no existe y se ha quitado la función WSACancelBlockingCall .

La función WSACleanup suele dar lugar a que se descarguen archivos DLL auxiliares específicos del protocolo. Como resultado, no se debe llamar a la función WSACleanup desde la función DllMain en un archivo DLL de aplicación. Esto puede provocar interbloqueos. Para obtener más información, consulte la función principal dll.

Windows Phone 8: esta función es compatible con las aplicaciones de Windows Phone Store en Windows Phone 8 y versiones posteriores.

Windows 8.1 y Windows Server 2012 R2: esta función es compatible con las aplicaciones de la Tienda Windows en Windows 8.1, Windows Server 2012 R2 y versiones posteriores.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8.1, Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado winsock.h (incluya Winsock2.h)
Library Ws2_32.lib
Archivo DLL Ws2_32.dll

Consulte también

API del proveedor de espacios de nombres PNRP

WSAStartup

Funciones winsock

Referencia de Winsock

closesocket

shutdown