2011-10-13 11 views
6

Tengo un socket UDP escuchando en un puerto para transmisiones de difusión y funciona bien.El socket de escucha UDP deja de escuchar después de cambios en la configuración de red

Sin embargo, cuando hiberno y reinicio el sistema operativo (Windows 7), el socket simplemente deja de recibir datos (y puedo ver que hay datos que llegan usando Wireshark).

Esto también ocurre si cambio cualquier configuración de red como, cambiar mi dirección IP, deshabilitar y habilitar el adaptador de red.

El sistema operativo parece deshabilitar todos los adaptadores de red cuando está hibernando y volver a habilitarlos cuando se reanude.

select acaba de devolver 0 (tiempo de espera) que no es diferente de cuando no estoy recibiendo datos. No pude encontrar ninguna referencia a este comportamiento en ninguna parte.

Si cierro el socket y lo vuelvo a crear, comienza a funcionar nuevamente.

Mis tomas de escucha TCP siguen funcionando bien después de reanudar el sistema operativo.

¿Alguna idea sobre cómo detectar y corregir esta situación?

EDIT: Todavía recibe datos de direcciones directamente bien, simplemente ya no recibe transmisiones de difusión.

Edit2: Sólo descubierto que si escribo a la toma (enviar un paquete falso a cualquier lugar) se empieza a trabajar de nuevo ...

+0

es posible que desee agregar etiquetas con las versiones de Windows relacionadas – jgauffin

+0

¿cuál es la dirección a la que está vinculado el socket? – User

Respuesta

1

creo que el código no se une de forma explícita a la toma "0.0 .0.0 "dirección. Entonces, cuando lo haces, se vincula la interfaz IP que está disponible en ese momento. Cuando se cambia esta IP o se desactiva la interfaz, este socket se restablecerá mediante la pila de TCP/IP. En su socket TCP, debe haber vinculado a la dirección "0.0.0.0" para que siempre escuche la conexión independientemente de cualquier cambio de IP/interfaz. Puede hacer que su zócalo udp también esté vinculado a "0.0.0.0" antes de enviar cualquier dato en él. Esto lo hará funcionar incluso después de la hibernación o cambios de IP.

Cuestiones relacionadas