2009-06-19 13 views
11

Abbiamo un'applicazione desktop .NET 2.0 che invia e riceve pacchetti di rete su UDP.Errore socket 10052 su socket UDP

Diversi utenti hanno segnalato un errore occasionale di socket 10052 che si verifica quando il codice chiama socket.BeginReceiveFrom su un socket UDP.

Cosa significa?

La documentazione ufficiale di MS per errore socket 10052 dice - citazione: "WSAENETRESET (10052) Rete è sceso connessione su reimpostare la connessione è stata interrotta a causa di keep-alive attività rilevamento di un errore durante l'operazione era in corso. Può anche essere restituito da setsockopt se viene effettuato un tentativo per impostare SO_KEEPALIVE su una connessione che ha già non riuscita. "

Questo non ha molto senso per un socket UDP poiché UDP è un protocollo senza connessione .

So che un altro codice di errore vicino 10054 in connessione con i socket UDP significa che un messaggio ICMP "Porta irraggiungibile" è stato ricevuto, e io sono chiedendo se 10052 potrebbe mappare a un altro messaggio ICMP?

Ho cercato su Google per mesi, leggo libri di rete, ecc. Ma non riesco a trovare nulla . Per favore aiuto - cosa significa errore socket 10052 su un socket UDP?

Grazie in anticipo

risposta

2

WSAE NET RESET suggerisce che accade a causa di un reset dell'interfaccia di rete stessa. Il tuo programma è seduto lì associato a una porta UDP, quindi in un certo senso è connesso a, ma all'interfaccia di rete anziché a un peer remoto.

Provare ad avviare il programma, portandolo al punto in cui questo BeginReceiveDalla chiamata sta per essere eseguito, quindi disabilitare la scheda NIC in Gestione periferiche e riattivarla. Oppure, con Wi-Fi, rilascia e ristabilisci la connessione al WAP. Potrebbe anche accadere semplicemente scollegando il cavo Ethernet alla macchina, poiché le versioni recenti di Windows hanno l'impostazione predefinita di uccidere tutti i socket connessi tramite la scheda NIC quando ciò accade.

Spiegherebbe i rari problemi segnalati dal campo. Ciò probabilmente si verifica solo in presenza di un errore di rete locale a livello hardware.

7

Vedere http://msdn.microsoft.com/en-us/library/ms740120%28v=vs.85%29.aspx, che descrive la funzione recvfrom. Dice WSAENETRESET (che è l'errore 10052 di winsock):

Per un socket di datagramma, questo errore indica che il tempo di vita è scaduto.

+2

Questo è uno dei molti errori che le implementazioni UDP tendono a segnalare inutilmente alle applicazioni. Devi praticamente ignorarli tutti. –

3

Assicurarsi che il valore TTL sia sufficientemente elevato, quando si inviano datagrammi UDP.

Se si utilizza la classe UdpClient. quindi utilizzare i seguenti prima di inviare il datagram:

myUdpClient.Ttl = 255; 

Nota: 255 è il valore massimo per TTL. C'è qualche problema di rete se quel valore non è sufficiente.

Problemi correlati