Alberto, el comportamiento que describes con la librería WinInet es conocido y puede ser frustrante. La función de
que implementaste debería recibir el mensaje `INTERNET_STATUS_CONNECTION_CLOSED` cuando se cierra la conexión, pero hay varias razones por las que esto puede no suceder en algunos casos.
1.
Caching de conexiones: WinInet tiene un mecanismo de caché que puede mantener las conexiones abiertas para su reutilización. Esto significa que, incluso si abandonas un sitio web, la conexión puede permanecer abierta en segundo plano. Esto es un comportamiento documentado de WinInet, donde se menciona que "la API de WinINet almacena en caché un único manejador de conexión para cada manejador HINTERNET generado por `InternetOpen`". Esto puede hacer que no recibas el mensaje de desconexión que esperas.
2.
Desconexión forzada: Si deseas forzar una desconexión, puedes intentar cerrar el manejador de conexión explícitamente utilizando `InternetCloseHandle`. Sin embargo, ten en cuenta que esto no siempre garantiza que recibirás el mensaje de desconexión, ya que, como se mencionó, WinInet puede manejar las conexiones de manera interna.
3.
Manejo de callbacks: Si estás utilizando múltiples conexiones o realizando llamadas asíncronas, asegúrate de que tu función de
callback esté correctamente configurada y que no haya problemas de sincronización. A veces, si la aplicación se cierra o el DLL que contiene tu código se descarga, los
callbacks pueden seguir siendo llamados, lo que puede causar problemas.
4.
Configuración de callbacks: Asegúrate de que estás configurando correctamente la función de
callback con `InternetSetStatusCallback`. Si no se establece correctamente, podrías no recibir todos los eventos esperados. Puedes consultar la documentación de Microsoft sobre cómo crear funciones de
callback para asegurarte de que lo estás haciendo correctamente:
Creating Status Callback Functions - Win32 apps (
https://learn.microsoft.com/en-us/windows/win32/wininet/creating-status-callback-functions).
Si después de revisar estos puntos sigues sin recibir el mensaje de desconexión, puede ser útil revisar el código y la lógica de tu aplicación para asegurarte de que no haya otros factores que estén interfiriendo con el manejo de las conexiones.