Faktycznie, wydaje się, że UdpClient
jest uszkodzony, jeśli chodzi o limity czasu. Próbowałem napisać serwer z wątkiem zawierającym tylko Odbiór, który dostał dane i dodał je do kolejki. Robiłem tego rodzaju rzeczy przez lata z TCP. Oczekuje się, że pętla blokuje się w odbiorze, dopóki nie pojawi się komunikat od requestera. Jednak pomimo ustawienia limitu czasu na nieskończoność:
_server.Client.ReceiveTimeout = 0; //block waiting for connections
_server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 0);
gniazdo kończy się po około 3 minutach.
Jedynym sposobem obejścia tego problemu było złapanie wyjątku limitu czasu i kontynuowanie pętli. To ukrywa błąd Microsoftu, ale nie odpowiada na podstawowe pytanie, dlaczego tak się dzieje.
Dzięki za odpowiedź. – Jack
To było dawno temu! Teraz wygląda dobrze. WaitOne zwraca również wynik, którego można użyć do ustalenia, czy upłynął limit czasu. – weston