2009-11-12 7 views
5

Mirando en la resolución de direcciones asíncrono en el Winsock parece que las dos únicas opciones son o bien utilizar el gethostbyname bloqueo en un hilo independiente, o utilizar WSAAsyncGetHostByName. Este último está diseñado por alguna razón para trabajar con mensajes de ventana, en lugar de operaciones superpuestas y puertos/rutinas de finalización.Resolución de dirección asincrónica en winsock?

¿Hay alguna versión de gethostbyname que funcione de forma asíncrona con operaciones superpuestas de forma similar al resto de la API winsock?

+1

El "algún motivo" fue diseñado de esa manera es que Winsock fue creado en el mundo Win16, donde no había hilos o programas en modo consola. (había programas de DOS, pero no tenían acceso a Winsock, excepto por el engaño.) Todos los programas de Windows tenían una GUI , o al menos un bucle de mensaje, por el cual el sistema operativo le dijo al programa cosas que sucedieron. Notificación de búsquedas de nombres terminados t a través de este mecanismo tiene sentido, en ese mundo. –

Respuesta

1

Lo sentimos, no hay una versión solapada de gethostbyname().

3

Lamentablemente no existe en este momento, aunque GetAddrInfoEx() tiene marcadores de posición para todas las cosas correctas para el funcionamiento asincrónico a través de todas las rutas 'habituales' (incluido IOCP) así que espero que haya finalmente ... Desafortunadamente, en este hora, los documentos dicen que todos estos deben establecerse en NULL y se marcan como 'reservados'. :(

Estoy a punto de escribir uno (he estado por un tiempo) ... Es lamentable que WSAAsyncGetHostByName ni siquiera permita la resolución de nombres simultáneos, por lo que es bastante inútil como base para lo que quiero, pero , una vez más, ya que no maneja IPv6 que también lo hace bastante inútil para mí. Espero empezar desde cero, posiblemente usando algo como this (beerware) como base.

+0

Tenga cuidado, la segunda biblioteca a la que se vincula es GPL'd. –

+0

Buen lugar Warren. Aún no había llegado al punto de seguirlo. Solo hice google la noche anterior. –