X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fnet%2Fresolve.cpp;h=e06bce77775e49fdd18569d12d79fec1f9739c0b;hb=3ab65d35cfd696002e09768a38f98e6a2e1ade81;hp=10e8c656797fedfdd685b2edb48ad5f20a217996;hpb=88bbb4039aa274c7f41ebe3a18085b63427e5475;p=libs%2Fnet.git diff --git a/source/net/resolve.cpp b/source/net/resolve.cpp index 10e8c65..e06bce7 100644 --- a/source/net/resolve.cpp +++ b/source/net/resolve.cpp @@ -40,16 +40,16 @@ namespace Net { SockAddr *resolve(const string &host, const string &serv, Family family) { - const char *chost = (host.empty() ? 0 : host.c_str()); - const char *cserv = (serv.empty() ? 0 : serv.c_str()); + const char *chost = (host.empty() ? nullptr : host.c_str()); + const char *cserv = (serv.empty() ? nullptr : serv.c_str()); int flags = 0; if(host=="*") { flags = AI_PASSIVE; - chost = 0; + chost = nullptr; } - addrinfo hints = { flags, family_to_sys(family), 0, 0, 0, 0, 0, 0 }; + addrinfo hints = { flags, family_to_sys(family), 0, 0, 0, nullptr, nullptr, nullptr }; addrinfo *res; int err = getaddrinfo(chost, cserv, &hints, &res); @@ -81,9 +81,7 @@ SockAddr *resolve(const string &str, Family family) } -Resolver::Resolver(): - event_disp(0), - next_tag(1) +Resolver::Resolver() { thread.get_notify_pipe().signal_data_available.connect(sigc::mem_fun(this, &Resolver::task_done)); } @@ -132,24 +130,24 @@ void Resolver::task_done() if(task->addr) signal_address_resolved.emit(task->tag, *task->addr); else if(task->error) + { + if(signal_resolve_failed.empty()) + { + RefPtr err = task->error; + task->error = nullptr; + thread.pop_complete_task(); + throw *err; + } signal_resolve_failed.emit(task->tag, *task->error); + } thread.pop_complete_task(); } } -Resolver::Task::Task(): - tag(0), - family(UNSPEC), - addr(0), - error(0) -{ } - - Resolver::WorkerThread::WorkerThread(): Thread("Resolver"), - sem(1), - done(false) + sem(1) { launch(); } @@ -176,7 +174,7 @@ Resolver::Task *Resolver::WorkerThread::get_complete_task() if(!queue.empty() && queue.front().is_complete()) return &queue.front(); else - return 0; + return nullptr; } void Resolver::WorkerThread::pop_complete_task() @@ -199,10 +197,10 @@ void Resolver::WorkerThread::main() sem.wait(); wait = false; - Task *task = 0; + Task *task = nullptr; { MutexLock lock(queue_mutex); - for(list::iterator i=queue.begin(); (!task && i!=queue.end()); ++i) + for(auto i=queue.begin(); (!task && i!=queue.end()); ++i) if(!i->is_complete()) task = &*i; }