boost.asio example läuft nicht
-
hi leute,
hatte vor kurzem schonmal ähnlichen thread gepostet aber bekam keine antwort auf meine frage. da ich mittlerweile gefallen an boost.asio gefunden habe, würde ich das programm gern zum laufen bringen. also man braucht boost und boost.asio, falls das zufällig jemand zur hand hat. dann sieht der code bei einem der examples so aus:
#include <ctime> #include <iostream> #include <string> #include <asio.hpp> using asio::ip::tcp; std::string make_daytime_string() { using namespace std; // For time_t, time and ctime; time_t now = time(0); return ctime(&now); } int main() { try { asio::io_service io_service; tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 13)); for (;;) { tcp::socket socket(io_service); acceptor.accept(socket); std::string message = make_daytime_string(); asio::error_code ignored_error; asio::write(socket, asio::buffer(message), asio::transfer_all(), ignored_error); } } catch (std::exception& e) { std::cerr << e.what() << std::endl; } system("pause"); return 0; }es wird dann wohl auch eine exception geworfen und der fehler wird anschließend auf cerr ausgegeben:
eine datei kann nicht erstellt werden, wenn sie bereits vorhanden ist
natürlich will ich hier keine dateien erstellen. kennt sich da irgendwer aus?
Vielen Dank schonmal für eure Bemühungen

-
Meine Empfehlung - nimm dir einen Debugger und versuch erstmal genau herauszufinden, welche Anweisung die Exception geworfen hat.
-
Im Zweifelsfall solltest du dich wohl eher an die Boost-Mailingliste wenden. Hört sich nach irgend einem internen Problem an.
Ansonsten versuch erst einmal rauszufinden wo die Exception geworfen wird.
-
Da boost.asio (noch) nicht von vielen C++lern benutzt wird, ist die Wahrscheinlichkeit auf eine Antwort in diesem Forum sehr gering. Das wird sich hoffentlich irgendwann ändern, wenn boost.asio eine bessere Verbreitung gefunden hat.
Hier kann man nur empfehlen, die boost-users-Mailingliste zu abonieren und dort die Frage zu stellen. Vergiss nicht noch deinen Compiler, System und Boost-Version anzugeben, damit man dir helfen kann.
Ansonst solltest du debuggen oder logs rausschreiben, um zu sehen, wo er rausfliegt.
-
ok vielen dank euch dreien erstmal!
hab in der MSVS 2005 express IDE eingestellt, dass das programm bei C++ exceptions angehalten werden soll, mit folgendem ergebnis: es wird auf die throw_exception.hpp (boost) verwiesen, hier mal der teil des codes der für das werfen einer exception verantwortlich ist.
template<class E> inline void throw_exception(E const & e) { throw e; }dieses e ist jetzt vom Typ asio::system_error. wenn man das e genauer betrachtet, stehen als fehlerbeschreibungen "Cannot obtain value" oder "Fehler auf ungültigen Speicherbereich nicht möglich". wollt erst nochmal hier nachfragen, wenn damit niemand etwas anfangen kann, probier' ichs mit der boost-mailing liste.
-
Jetzt müsstest du eventuell noch ein bis zwei Stufen den Callstack hochklettern, um zu sehen, wer diese throw_exception() überhaupt aufruft (und Boost fragen, warum derjenige nicht selber geworfen hat ;)).