X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fhttp%2Fclient.cpp;h=705f4cb7bbd0a7e09dcdbcde3dc979e9bf0cae86;hb=5afa6e0e07b20ef58d262d69d96971df9a4be71f;hp=da6b25ebc17ef4c6fc0234704e4b80ad73f40b84;hpb=6ed443a30ab510d3365bbc879cd27aef36f173ca;p=libs%2Fnet.git diff --git a/source/http/client.cpp b/source/http/client.cpp index da6b25e..705f4cb 100644 --- a/source/http/client.cpp +++ b/source/http/client.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -53,7 +54,7 @@ void Client::use_resolver(Net::Resolver *r) void Client::start_request(const Request &r) { if(request) - throw client_busy(); + throw invalid_state("already processing a request"); delete sock; sock = 0; @@ -141,23 +142,39 @@ void Client::resolve_failed(unsigned tag, const exception &err) return; resolve_tag = 0; - signal_socket_error.emit(err); - delete request; request = 0; + + if(signal_socket_error.empty()) + throw err; + signal_socket_error.emit(err); } void Client::connect_finished(const exception *err) { if(err) { - signal_socket_error.emit(*err); - delete request; request = 0; + + if(signal_socket_error.empty()) + throw *err; + signal_socket_error.emit(*err); } else - sock->write(request->str()); + { + try + { + sock->write(request->str()); + } + catch(const exception &e) + { + if(signal_socket_error.empty()) + throw; + signal_socket_error.emit(e); + return; + } + } } void Client::data_available() @@ -170,6 +187,8 @@ void Client::data_available() } catch(const exception &e) { + if(signal_socket_error.empty()) + throw; signal_socket_error.emit(e); return; }