Wykrycie utraty połączenia TCP po stronie serwera

Wykrycie utraty połączenia TCP po stronie serwera
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
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:

Kopiuj
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.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0

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

  • Rejestracja: dni
  • Ostatnio: dni
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.