Ich habe einen Windows-Dienst, der auf einem bestimmten Port auf Nachrichten wartet. Hier ist der entsprechende Code:
public void StartWaitForConnections()
{
try
{
TcpListener myList = new TcpListener(_intPort);
myList.Start();
while (_bRunListener)
{
Socket s = myList.AcceptSocket();
s.LingerState = new LingerOption(false, 0);
OnDataArrival(s);
}
myList.Stop();
}
catch (ThreadAbortException)
{
return;
}
catch (Exception)
{
throw;
}
}
Es passiert im Prinzip folgendes: Wenn auf dem Port eine Nachricht eingeht, wird ein neues Socket-Objekt erstellt und dieses mit einem Event (OnDataArrival) an eine ausstehende Klasse weitergegeben, die dann für die weitere Verarbeitung einen neuen Thread startet.
Dies funktioniert auch alles ganz fein.
Allerdings passiert rund alle sieben, acht Tage folgendes: Es können keine Nachrichten mehr angenommen werden (z.B. läuft Telnet in einen Timeout). Wenn ich dann den Dienst beende und neu starte wirft die Applikation manchmal eine Socket-Ausnahme:
System.Net.Sockets.SocketException: Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
Dies bedeutet für mich, dass das Programm offenbar noch auf dem Port lauscht, auf dem es offenbar keine Nachrichten mehr entgegen nehmen kann.
Hat jemand schonmal etwas ähnliches erlebt?
Gruß
Benjamin