realtà, sembra che UdpClient
è rotto quando si tratta di timeout. Ho provato a scrivere un server con un thread contenente solo una ricezione che ha ottenuto i dati e li ha aggiunti a una coda. Ho fatto questo genere di cose per anni con TCP. L'aspettativa è che i blocchi di loop in ricezione fino a quando un messaggio arriva da un richiedente. Tuttavia, nonostante l'impostazione del timeout all'infinito:
_server.Client.ReceiveTimeout = 0; //block waiting for connections
_server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
presa di volte dopo circa 3 minuti.
L'unica soluzione che ho trovato è stato catturare l'eccezione di timeout e continuare il ciclo. Questo nasconde il bug di Microsoft, ma non riesce a rispondere alla domanda fondamentale del perché questo sta accadendo.
Grazie per la risposta. – Jack
Questo è stato tanto tempo fa! Adesso sembra ok. WaitOne restituisce anche un risultato che è possibile utilizzare per determinare se è scaduto. – weston