2009-06-19 30 views
11

Tenemos una aplicación de escritorio .NET 2.0 que envía y recibe paquetes de red a través de UDP.Error de socket 10052 en el socket UDP

Varios usuarios han informado de un error de socket ocasional 10052 que ocurre cuando el código llama a socket.BeginReceiveFrom en un socket UDP.

¿Qué significa esto?

La documentación oficial de MS de error de socket 10052 dice - cita: "WSAENETRESET (10052) Red cayó conexión en restablecer la conexión se ha roto debido al mantenimiento de conexión actividad de detección de un fallo mientras que la operación estaba en marcha. También puede devolverse mediante setsockopt si se realiza un intento para establecer SO_KEEPALIVE en una conexión que ya ha fallado . "

Esto simplemente no tiene mucho sentido para un socket UDP ya que UDP es un protocolo sin conexión .

sé que otro código de error cercano 10054 en relación con sockets UDP significa que se ha recibido un mensaje ICMP "puerto inalcanzable", y estoy preguntando si 10052 puede asignar a otro mensaje ICMP?

He buscado en Google esto durante meses, he leído libros de red, etc. pero no puedo encontrar nada. Por favor, ayuda: ¿qué significa el error de socket 10052 en un socket UDP?

Gracias de antemano

Respuesta

2

WSAE NET REINICIAR sugiere que ocurre debido a un restablecimiento de la propia interfaz de red. Su programa está allí enlazado a un puerto UDP, por lo tanto, en cierto sentido, está conectado a, pero a la interfaz de red en lugar de a un par remoto.

Intente iniciar su programa, llevándolo al punto donde está a punto de realizarse esta llamada BeginReceiveFrom, luego deshabilite su NIC en el Administrador de dispositivos y vuelva a habilitarla. O bien, con Wi-Fi, suelte y restablezca la conexión al WAP. Incluso podría suceder simplemente desconectando el cable Ethernet de su máquina, ya que las versiones recientes de Windows matan por defecto todos los enchufes conectados a través de esa NIC cuando esto sucede.

Explicaría los raros informes de problemas del campo. Esto probablemente solo suceda cuando hay algún error de red local en el nivel del hardware.

7

Consulte http://msdn.microsoft.com/en-us/library/ms740120%28v=vs.85%29.aspx, que describe el recvdesde la función. Dice de WSAENETRESET (que es winsock error 10052):

Para un socket de datagrama, este error indica que el tiempo de vida ha expirado.

+2

Este es uno de los muchos errores que las implementaciones de UDP tienden a informar inútilmente a las aplicaciones. Tienes que ignorarlos a todos. –

3

Asegúrese de que el valor de TTL sea lo suficientemente alto al enviar datagramas UDP.

Si está utilizando la clase UdpClient. utilizar el siguiente antes de enviar el datagrama:

myUdpClient.Ttl = 255; 

Nota: 255 es el valor máximo de TTL. Existe un problema de red si ese valor no es suficiente.

Cuestiones relacionadas