Hallo Community!
Ich schreib gerade an einer kleinen Server-App und beim Testen fiel mir auf, dass Sockets scheinbar - warum auch immer - trotz Close noch eine Weile geöffnet bleiben. Das allerdings auch nur, wenn der Server die Verbindung schließt.
Zum Testen verwende ich den einfachen Telnet-Client, den mir Windows bietet. Der Server-Part funktioniert soweit eigentlich, die Verbindung wird auch geschlossen (Telnet schmeißt mich mit dem typischen "Verbindung zu Host verloren." raus) - wie gesagt bloß das Problem, dass der Client-Socket auf Server-Seite scheinbar geöffnet bleibt. Ein "netstat -a" ergibt mir zumindest, dass mein Server noch einen Socket zum Client offen hat (Status: wartend), der Client seinen korrekterweise aber bereits geschlossen hat.
Folgender Code demonstriert das Problem:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| class Program { static void Main(string[] args) { TcpListener listener = new TcpListener(IPAddress.Any, 1000) listener.Start();
Socket client = listener.AcceptSocket(); client.Send(Encoding.UTF8.GetBytes("Hello World!")); client.Shutdown(SocketShutdown.Both); client.Disconnect(false); client.Close(); } } |
Nach einem "telnet localhost 1000", der gesendeten Nachricht und Rausschmiss durch den Server sollte ein "netstat -a" zeigen, dass der Client-Socket im Server noch auf "Wartend" hängt.
Hat eventuell jemand eine Idee, woran das liegen könnte?
Viele Grüße!
Mao (der wegen angeblich bereits existentem Usernamen ein Palindrom verwenden musste)
(Crosspost:
mycsharp.de)