Die Ausnahme konnte nicht von boost :: asio :: io_service :: run abgefangen werden

9

Ich habe einen TCP-Server auf boost :: asio, er wartet auf eine Verbindung und nach dem Abrufen beginnt er, Datenblöcke zu senden, die boost :: asio :: in eine Schleife schreiben.

%Vor%

Wenn ich einen Empfänger manuell stoppe, wird eine Exception über defekte Pipe geworfen und richtig behandelt. Aber manchmal passiert Rohrbruch (Ursache der schlechten Verbindung nehme ich an) und die Ausnahme fällt auf wundersame Weise durch alle Fänge und die Anwendung wird beendet:

%Vor%

Untersuchen des Kerns Ich sehe, dass es in boost :: asio :: write passiert ist, entstanden in io_service :: run (). Was mache ich falsch?

Ich habe auch versucht, den TCP-Server mit async_write neu zu schreiben, aber es passiert immer noch, aber nicht so oft.

BEARBEITEN1: Wenn ich den Empfänger manuell stoppe, bekomme ich genau die selbe Ausnahme und den gleichen Callstack, aber diesen kann ich verarbeiten.

EDIT2: von dem, was ich jetzt verstehe, kann nicht-abfangbare Ausnahme das Ergebnis von zu vielen Daten sein, die zu schnell durch den Sockel gesendet werden. Nicht sicher aber.

    
Nikolay Kovalenko 26.05.2016, 12:27
quelle

1 Antwort

1

Die Fehlermeldung in terminate erklärt tatsächlich, was passiert. boost::exception_detail::clone_impl schlägt fehl. Ohne den Code zu durchforsten, würde ich annehmen, dass er verwendet wird, um den Kopierkonstruktor der Ausnahmeklasse zu implementieren. Wenn dieser Kopierkonstruktor während der Ausnahmebehandlung eine Ausnahmebedingung auslöst, wird der Ausnahmeblock umgangen, und die Ausnahme wird nach oben weitergegeben. (Auch wenn Sie per Referenz darauf zugreifen, können Kopien vom Compiler erstellt werden.)

Jetzt weiß ich nicht warum der Kopierkonstruktor fehlschlägt; Es gibt nicht genug in der Frage zu wissen. Aber diese Frage in Bezug auf asynchrone I / O hatte ein sehr ähnliches Problem, und da scheint die Crux gewesen zu sein, dass ein shared_ptr vor der Ausnahmeverarbeitung zerstört wurde. Sieht ähnlich aus.

    
eh9 01.07.2016 12:44
quelle

Tags und Links