X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fnet%2Fresolve.h;h=3071b771f569aa57f196c41cc4f8f9520c715130;hb=394c9a732192fce9b3b453dfdb9e92400af2a4f8;hp=6a0479e6aa363f2b22a49b5e1b999860a7666417;hpb=6625cf0e574406425c35d33110f8d99617e902df;p=libs%2Fnet.git diff --git a/source/net/resolve.h b/source/net/resolve.h index 6a0479e..3071b77 100644 --- a/source/net/resolve.h +++ b/source/net/resolve.h @@ -2,36 +2,36 @@ #define MSP_NET_RESOLVE_H_ #include +#include #include #include #include #include #include #include -#include "constants.h" +#include "mspnet_api.h" +#include "sockaddr.h" namespace Msp { namespace Net { -class SockAddr; - /** Resolves host and service names into a socket address. If host is empty, the loopback address will be used. If host is "*", the wildcard address will be used. If service is empty, a socket address with a null service will be returned. With the IP families, these are not very useful. */ -SockAddr *resolve(const std::string &, const std::string &, Family = UNSPEC); +MSPNET_API SockAddr *resolve(const std::string &, const std::string &, Family = UNSPEC); /** And overload of resolve() that takes host and service as a single string, separated by a colon. If the host part contains colons, such as is the case with a numeric IPv6 address, it must be enclosed in brackets. */ -SockAddr *resolve(const std::string &, Family = UNSPEC); +MSPNET_API SockAddr *resolve(const std::string &, Family = UNSPEC); /** An asynchronous name resolver. Blocking calls are performed in a thread and completion is notified with one of the two signals. */ -class Resolver +class MSPNET_API Resolver { private: struct Task @@ -40,8 +40,8 @@ private: std::string host; std::string serv; Family family = UNSPEC; - SockAddr *addr = 0; - std::runtime_error *error = 0; + std::unique_ptr addr; + std::unique_ptr error; bool is_complete() const { return addr || error; } }; @@ -59,7 +59,7 @@ private: WorkerThread(); ~WorkerThread(); - void add_task(const Task &); + void add_task(Task &&); Task *get_complete_task(); void pop_complete_task(); @@ -74,7 +74,7 @@ public: sigc::signal signal_resolve_failed; private: - IO::EventDispatcher *event_disp = 0; + IO::EventDispatcher *event_disp = nullptr; WorkerThread thread; unsigned next_tag = 1;