]> git.tdb.fi Git - libs/net.git/blobdiff - source/http/client.cpp
Improve error handling
[libs/net.git] / source / http / client.cpp
index da6b25ebc17ef4c6fc0234704e4b80ad73f40b84..e09057684957cac17acdeb17adeaf272efdc1952 100644 (file)
@@ -141,23 +141,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 +186,8 @@ void Client::data_available()
        }
        catch(const exception &e)
        {
+               if(signal_socket_error.empty())
+                       throw;
                signal_socket_error.emit(e);
                return;
        }