Autor Beitrag
MaoaM
Hält's aus hier
Beiträge: 2

Win XP Home, Win Vista Ult, Debian 4.0
Turbo Delphi, C# VS 2008 Expr.
BeitragVerfasst: Mi 11.02.09 11:51 
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:
ausblenden 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)