WSACancelBlockingCall-Ausnahme

Ok, ich habe eine seltsame Ausnahme, die ausgelöst von meinem code, war stört mich seit Ewigkeiten.

System.Net.Sockets.SocketException: A blocking operation was interrupted by a call to WSACancelBlockingCall
   at System.Net.Sockets.Socket.Accept()
   at System.Net.Sockets.TcpListener.AcceptTcpClient()

MSDN ist nicht sonderlich hilfreich auf dieser : http://msdn.microsoft.com/en-us/library/ms741547(VS.85).aspx und ich weiß nicht einmal wissen, wie Sie mit der Problembehandlung beginnen diese. Es ist nur geworfen 4 oder 5 mal am Tag, und nie in unserer test-Umgebung. Nur in der Produktion, Standorten und ALLEN Standorten.

Habe ich gefunden, viele Beiträge, Fragen über diese Ausnahme, aber nicht die tatsächliche definitive Antworten auf das, was verursacht Sie, und wie zu behandeln oder zu verhindern.

Der code läuft in einem separaten hintergrund-thread, der die Methode startet :

public virtual void Startup()
    {
     TcpListener serverSocket= new TcpListener(new IPEndPoint(bindAddress, port));    
        serverSocket.Start();

dann Lauf ich eine Schleife dabei, alle neuen verbindungen, wie Arbeitsplätze in einem separaten thread-pool. Es wird komplizierter, weil der app-Architektur, aber im Grunde:

   while (( socket = serverSocket.AcceptTcpClient()) !=null) //Funny exception here
    {
         connectionHandler = new ConnectionHandler(socket, mappingStrategy);
         pool.AddJob(connectionHandler);
    }
  }

Von dort aus die pool gibt es eigene threads, die kümmern sich um jeden job in einem eigenen thread, getrennt.

Mein Verständnis ist, dass AcceptTcpClient() ist ein blockierender Aufruf, und irgendwie winsock sagen, den thread zu stoppen, blockieren und fortsetzen.. aber warum? Und was soll ich tun? Nur die Ausnahme abfangen und ignorieren es?


Gut, ich denke einige andere Threads, die Schließung der Steckdose, aber es ist sicherlich nicht von meinem code.
Was ich gerne wissen würde ist: ist das socket geschlossen, indem der verbindende client (auf der anderen Seite der Buchse) oder ist es geschlossen, von meinem server. Weil, wie es ist, in diesem moment, wenn diese Ausnahme Eintritt, wird es shutsdown meine listening-port, effektiv schließen meines service. Wenn dies geschehen ist, von einem entfernten Standort, dann ist es ein großes problem.

Alternativ, das könnte auch einfach den IIS-server heruntergefahren meine Anwendung, und somit der Streichung meine hintergrund-threads und blockierenden Methoden?

InformationsquelleAutor der Frage Radu094 | 2008-08-28

Schreibe einen Kommentar