Pracuję z komercyjną aplikacją, która wyrzuca SocketException z komunikatem,
Istniejące połączenie zostało przymusowo zamknięte przez zdalnego hosta
Dzieje się tak w przypadku połączenia gniazdowego między klientem a serwerem. Połączenie jest żywe i dobre, a mnóstwo danych jest przesyłanych, ale potem zostaje rozłączone znikąd.
Czy ktoś to widział wcześniej? Jakie mogą być przyczyny? Mogę odgadnąć kilka przyczyn, ale czy istnieje sposób, aby dodać więcej do tego kodu, aby ustalić, jaka może być przyczyna?
Wszelkie komentarze / pomysły są mile widziane.
... Najnowszy ...
Mam trochę logowania z niektórych śledzenia .NET,
System.Net.Sockets Verbose: 0 : [8188] Socket#30180123::Send() DateTime=2010-04-07T20:49:48.6317500Z
System.Net.Sockets Error: 0 : [8188] Exception in the Socket#30180123::Send - An existing connection was forcibly closed by the remote host DateTime=2010-04-07T20:49:48.6317500Z
System.Net.Sockets Verbose: 0 : [8188] Exiting Socket#30180123::Send() -> 0#0
Na podstawie innych części logowania zauważyłem, że napis „0 # 0” oznacza, że wysyłany jest pakiet o długości 0 bajtów. Ale co to naprawdę oznacza?
Występuje jedna z dwóch możliwości i nie jestem pewien, która
1) Połączenie jest zamykane, ale dane są następnie zapisywane w gnieździe, tworząc w ten sposób wyjątek powyżej. 0 # 0 oznacza po prostu, że nic nie zostało wysłane, ponieważ gniazdo było już zamknięte.
2) Połączenie jest nadal otwarte i wysyłany jest pakiet zerowych bajtów (tj. Kod zawiera błąd), a wartość 0 # 0 oznacza, że próbowano wysłać pakiet zerowych bajtów.
Co o tym myślisz? Wydaje mi się, że to może być niejednoznaczne, ale może ktoś inny widział takie rzeczy?