Wykrycie utraty połączenia TCP po stronie serwera

0

Chciałem w osobnym wątku na bieżąco sprawdzać aktualność połączeń TCP. Spróbowałem tak:

foreach (DictionaryEntry de in klienci)
                    {
                        clientInfo odblisty = (clientInfo)klienci[de.Key];
                        if (!odblisty.tcpclient.Client.IsBound)
                        {
                            kk.RemoveItems(d_lb_listauzytk, de.Key);
                            klienci.Remove(de.Key);
                        }
                    }

I nic, zmieniłem na tak:

foreach (DictionaryEntry de in klienci)
                    {
                        clientInfo odblisty = (clientInfo)klienci[de.Key];
                        if (!odblisty.tcpclient.Client.Connected)
                        {
                            kk.RemoveItems(d_lb_listauzytk, de.Key);
                            klienci.Remove(de.Key);
                        }
                    }

I to samo. Tak tego nie idzie zrobić. Jest jakiś bardziej kulturalny sposób na zrobienie tego niż próba wysłania czegoś co jakiś czas do klientów? Raz że to generuje zbędny ruch, dwa że zależy mi na tym żebym wiedział o rozłączeniu klienta zaraz po tym jak się rozłączy.

0

Primo, to w foreachu się nie usuwa elementów z kolekcji. Secundo, to bez pingowania raczej się nie da.

0

Usuwa się ale później trzeba przerwać pętlę;). Zrobiłem już to z wysyłaniem krótkich wiadomości i sprawdzaniem czy nie ma wyjątku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1