X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fnet%2Fresolve.h;h=3071b771f569aa57f196c41cc4f8f9520c715130;hb=HEAD;hp=65d1db89977425ff6fc7079b83aef60ba74d680b;hpb=3ab65d35cfd696002e09768a38f98e6a2e1ade81;p=libs%2Fnet.git diff --git a/source/net/resolve.h b/source/net/resolve.h index 65d1db8..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 = nullptr; - std::runtime_error *error = nullptr; + 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();