Hi,
folgendes Problem:
Ich habe 2 Anwendungen, jeweils mit Winsocks2 und Client/Server Funktionalität (Also sowohl Listener, als auch Sockets die Verbunden werden).
Basis: CAsyncSocket
Anwendung 1: A1
Anwendung 2: A2
Nun habe ich folgendes verhalten beobachtet:
A1 verbindet sich als Client zu A2. Informationen werden korrekt ausgetauscht und entsprechend abgearbeitet. A1 schließt die Verbindung zu A2 nicht korrekt, allerdings wird bei Zerstörung des, den Verbindungssocket beinhaltenden, Objektes in A1 logischerweise der Socket gekillt. Die API sendet völlig richtig ein RST Signal, das von A2 auch korrekt erhalten wird. Nun baue ich eine neue Verbindung (Neues Objekt, neues Socketobjekt im Objekt, ...) zu A2 auf, hier wurde "OnClose()" korrekt durchlaufen und entsprechend aufgeräumt, nun kommt die neue Verbindungsanfrage an und wird auch angenommen. Von nun dauert es eine undefinierte Zeit bis A2 sich in einer Endlosschleife verheddert.
Hat jemand dieses Verhalten auch beobachtet und kann mir mehr zu den Hintergründen verraten? Ich steig da gerade noch nicht so ganz durch. Das zusätzlich verwirrende ist: Dieses Verhalten tritt _nicht_ auf, wenn ich Haltepunkte setze, bzw. den Debuglauf unterbreche und von Hand "Schritt für Schritt" abarbeite.
Die Aufrufliste nennt mir NTKERNEL als Einstiegspunkt, hier hab ich jeweils nur Assemblercode und versuche es natürlich zu vermeiden daraus "entsprechenden Hochsprachencode" zu erstellen, den ich auf die schnelle lesen kann.
Die Endlosschleife bewegt sich zwisch MSWSOCKS und NTKERNEL.
Erfahrungen eurerseits?
Erklärungen?
Was hab ich übersehen?
Zu guter letzt: Ich weiss, dass der Auslöser ein Programmierfehler ist. Dieser wurde selbstredend entsprechend beseitigt, sobald ich ihn gefunden hatte. Nichtsdestotrotz versuche ich den Hintergrund der Endlosschleife zu verstehen.
Klischeepunk Gast |