Bağlam: C# linux perl uygulamasını taşıyorum, sunucu bir udp bağlantı noktasında dinler ve tek bir udp soketi üzerinden uzak istemcilerle birden çok eşzamanlı iletişim kurar. Test sırasında, udp sunucusuna yüksek hacimli paketler gönderiyorum, istemcileri yeni bağlantıların kaydedildiği sunucuyu gözlemlemek için rasgele yeniden başlatıyorum. Sorun şu: Bir udp istemcisini öldürdüğümde, o istemci için hala sunucuda veri olabilir. Sunucu bu verileri göndermeye çalıştığında, "iceri yok" mesajının bir icmp'i olur ve sonuçta sokette bir istisna oluşur.Bir C# udp soket istisnasından incelikle nasıl kurtarılır?
C# async işleyicisini soketle ilişkilendirmeyi denediğimde bu soketi yeniden kullanamıyorum, istisna hakkında şikâyet ediyor, bu nedenle sunucu bağlantı noktasındaki udp soketini kapatıp yeniden açmam gerekiyor. Bu problemin tek yolu bu mu ?, elbette, udp soketinin teknik olarak bir "sabitleme" yolu vardır, UDP soketleri bir uzak soketin durumunu bilmemeli mi?
Herhangi bir yardım veya işaretçi çok takdir edilecektir. Teşekkürler.
Eh üstlenmez komutların doğru kümesini kullanıyor olmadığını kontrol etmek faydalı olabilir, teknik olarak ağ yığını uzak uç, bazı uygulamaların gerçekleştirdiği bir icmp "hedefe ulaşılamaz" sinyali gönderirse kapalı bir udp portunun farkındadır. Belki de geçici olarak icmp'i engellemeyi deneyeceğim ve aynı istisnaları alıp alamayacağımı göreceğim ... –
@gearoid O zaman bile, soketin bağlantı noktası olup olmadığını veya – Toad
olduğunu bilmemesi için başka bir paket göndermeli. * bağlı * ve * bağlı olmayan * UDP soketleri arasında bir ayrım var. Birincisi için, çekirdek, ICMP hatasını hangi uygulamaya yönlendirecek? ikincisi için, bu yüzden hata teslim edilmez. Hepsi soket portu atamasına kadar kaynar. O zaman .NET'den nasıl çalıştığını bilmiyorum. –