Acabo de tropezar con el HTTP Server API de Microsoft. La introducción indica:Uso de HttpApi con puertos de finalización de E/S
La API del servidor HTTP permite que las aplicaciones se comuniquen a través de HTTP sin usar el servidor de información de Internet de Microsoft (IIS). Las aplicaciones pueden registrarse para recibir solicitudes HTTP para URL particulares, recibir solicitudes HTTP y enviar respuestas HTTP. La API del servidor HTTP incluye soporte SSL para que las aplicaciones puedan intercambiar datos a través de conexiones HTTP seguras sin IIS. También está diseñado para funcionar con puertos de terminación de E/S.
Encontrando esto genial, eché un largo vistazo a la lista de funciones para ambas versiones de la API. Ahora, la única otra parte de la documentación que menciona los puertos de terminación de E/S es la función HttpReceiveHttpRequest
(). El último parámetro es un OVERLAPPED
estructura opcional con la siguiente descripción:
Para las llamadas asíncronas, establecer
pOverlapped
para que apunte a una estructuraOVERLAPPED
; para llamadas sincrónicas, configúrelo enNULL
. Una llamada síncrona bloquea hasta que una solicitud ha llegado a la cola especificada y parte o la totalidad ha sido recuperada, mientras que una llamada asíncrona devuelve inmediatamenteERROR_IO_PENDING
y la aplicación que llama utilizaGetOverlappedResult()
o puertos de terminación de E/S para determinar cuándo se realiza la operación terminado. Para obtener más información sobre el uso de estructuras OVERLAPPED para la sincronización, consulte Synchronization and Overlapped Input and Output.
No hay más información, y todas las estructuras son opacas y ocultan deliberadamente la información de conexión. También observe que el tema Sincronización y Superposición de entrada y salida no menciona la API HTTP.
¿Alguien tiene alguna idea sobre cómo conectar la cola de la API HTTP a un puerto de E/S de finalización?
¿Tiene algún motivo para creer que no pasaría simplemente el controlador a la cola como primer parámetro de CreateIoCompletionPort? – Gabe
No. No tengo ninguna razón para creer que eso sea lo correcto tampoco. –