Servidores adaptados a windows 7

Por Falcon - 13/09/2011

Al probar las comunicaciones entre el cliente en Ogre y los servidores, me di cuenta de que había un fallo en la recepción de datos. Tirando del hilo descubrí que los servidores, que sí responden bien a los comandos de admin (que van por TCP), no eran capaces de hacerlo con los comandos de cliente (por UDP).

Resulta que Microsoft mejoró la seguridad de los winsock y ya no se puede hacer un bind a la misma interfaz y puerto (desde windows 2003 server) desde dos sockets. La solución temporal es jugar con las opciones del socket, y simplemente establecer la opción SO_REUSEADDR sobre el primer socket antes del bind. Me ha llevado más tiempo de lo normal verlo porque el error que daba el bind es WSAEACCES, que indica más un acceso denegado; el error WSAEADDRINUSE hubiera sido más acorde con la situación.

Aunque tengo pendiente adaptar el servidor a un SO tipo UNIX, de momento necesito esperar a tener una cuenta SSH con privilegios de compilación para ir probándolo. Quizá virtualice un LINUX (preferiría un freeBSD pero eso será más adelante) con virtualbox de Oracle y así lo programaré más rápido. El fix que hay ahora en windows no es la solución más elegante, porque si windows cambió ese comportamiento fue por seguridad. Es cierto que permitir que otros sockets hagan bind a la misma dirección y puerto puede suponer un serio agujero, pero como estamos en una fase anterior a alfa lo vamos a dar por pasable.

Ahora vuelvo a la programación del cliente Ogre, que hay ventanas que están ansiosas por funcionar.