2009-10-06 12 views
5

Parece ser que la implementación requerida para configurar un socket de multidifusión UDP ha cambiado entre Windows XP y Windows Vista. Específicamente:multidifusión UDP usando winsock diferencias API entre XP y Vista

  • bajo Windows XP, es imprescindible llamada bind() antes de que pueda hacer referencia a cualquier opciones de conector de multidifusión específico.

  • Sin embargo, en Windows Vista, no debe llamar abind() cuando se trata de sockets de multidifusión.

Al fallar cualquiera de estos dos puntos, se produce un error de socket en el tiempo de ejecución.

¿Me estoy volviendo loco, o lo he visto otras personas también? ¿Hay una solución mejor que la compilación condicional de la llamada bind()?

Respuesta

5

¿Qué error te va desde el setsockopt() llamada que realice a aplicar IP_ADD_MEMBERSHIP y unirse a los grupo de multidifusión?

Acabo de ejecutar algunas pruebas aquí con mi marco de servidor y noto que DOY bind() en Windows 7 (no tengo un cuadro de Vista a la mano) y puedo unirme a un grupo de multidifusión como esperaba siempre que ambas, la dirección de enlace y la dirección de multidifusión sean válidas.

Sin embargo no puedo llamar a bind() con INADDR_ANY, ya que hace que la unión del grupo de multidifusión a fallar con el error 10022 (WSAEINVAL) y si la dirección del grupo de multidifusión no es una dirección de multidifusión válida la llamada falla con el error 10049 (WSAEADDRNOTAVAIL). Lo cual parece bastante justo.

estoy arrancando una caja de XP ahora ...

[Editado después de probar en XP]

En XP es legal bind() a INADDR_ANY y es legal el uso de direcciones de multidifusión no válidos. Entonces, supongo que estás haciendo uno de esos y por lo tanto funciona en XP y no en Vista/Win7.

Entonces, ¿qué error está recibiendo y a qué dirección se está comprometiendo?

1

No sé acerca de esta cuestión específica, pero sí sé que la pila de red fue reescrito desde cero para Vista

+0

genial - pensarías que harían pruebas de regresión en el nuevo código ¿eh? Esto me enoja ... arrrrgggghhhHHH! – Thomi

0

Bueno, pregunta muy antigua, pero alguien sabe cómo comprobar qué versión de winsock está presente en la máquina?

que tienen algunas máquinas antiguas que siguen utilizando XP o Server 2003. pero las pruebas para la versión de Windows no ayuda, parece que es posible tener una versión de Windows 5.1, que no está aceptando el enlace antes, y una máquina que tiene 5.2 Versión que lo acepta.