İstemcinin TCP bağlantısıyla bağlandığı bir uygulama üzerinde çalışıyorum, bu da potansiyel olarak çok fazla zaman alabilecek bir işi tetikler. Kullanıcı TCP bağlantısını bıraktığında bu iş iptal edilmelidir.Kapalı bağlantıları algılamak için bir ağ akışına sıfır bayt yazmak güvenilir bir yol mu?
Şu anda, ne periyodik ağlarını kontrol eden bir zamanlayıcı başlatılırken yapıyorum bunu yaparak bağlantı akışları:
// stream is a Stream instance
var abort = false;
using (new Timer(x => {
try
{
stream.Write(new byte[0], 0, 0);
}
catch (Exception)
{
abort = true;
}
}, null, 1000, 1000))
{
// Do expensive work here and check abort periodically
}
okumak isterdi
CanWrite
, CanRead
veya Connected
ancak rapor Akışın son durumu. Sıfır bayt yazma, bağlantıyı sınamak için güvenilir bir yol mu, yoksa bu da sorunlara neden olabilir mi? Akışta herhangi bir gerçek veri yazamıyorum ya da okuyamıyorum, çünkü bu müşteriyi dağıtacaktır.
Benim için çalışıyor gibi görünüyor, ama ben senin noktasını görebiliyorum. Tüm yolu araştırmayı beklemiyorum, ama eğer biraz giderse muhtemelen yeterince iyi olur. Bir yerlerde sıfırlama bağlantısı olup olmadığını söyleyen bir tür yerli bayrak olmalı? Bir olay ya da bir şey gerçekten güzel olurdu. – Dervall
@Dervall Yığın sıfırlama olup olmadığını bilir, ancak hayatımda size verecek bir TCP API'sı görmedim. Hataları almak için TCP bağlantısında G/Ç yapmanız gerekir. Gerçekten bu şekilde tasarlandı: 'çevir sesi yok'. Ara düğüm hataları ve yeniden yönlendirmelerden kurtulmak için üretildi. – EJP