X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresolve.cpp;h=076fea065dee3960abc755d03e816d9fbcac909a;hb=db63dde92c3f9d73f295a052828c639576ab7c4c;hp=e732fc040dfe037334cd203dc19fb2fc88f93906;hpb=a81c41acd873cda7f40bca634782230d9e57dc4f;p=libs%2Fnet.git diff --git a/source/resolve.cpp b/source/resolve.cpp index e732fc0..076fea0 100644 --- a/source/resolve.cpp +++ b/source/resolve.cpp @@ -4,7 +4,9 @@ #else #include #endif -#include +#include +#include +#include "sockaddr_private.h" #include "socket.h" #include "resolve.h" @@ -36,22 +38,27 @@ SockAddr *resolve(const string &s, Family family) host = s; } - addrinfo hints = {0, family, 0, 0, 0, 0, 0, 0}; + addrinfo hints = { 0, family_to_sys(family), 0, 0, 0, 0, 0, 0 }; addrinfo *res; const char *chost = (host.empty() ? 0 : host.c_str()); const char *cserv = (serv.empty() ? 0 : serv.c_str()); int err = getaddrinfo(chost, cserv, &hints, &res); if(err==0) { - SockAddr *addr = SockAddr::create(*res->ai_addr); + SockAddr::SysAddr sa; + sa.size = res->ai_addrlen; + const char *sptr = reinterpret_cast(res->ai_addr); + char *dptr = reinterpret_cast(&sa.addr); + copy(sptr, sptr+res->ai_addrlen, dptr); + SockAddr *addr = SockAddr::from_sys(sa); freeaddrinfo(res); return addr; } else #ifdef WIN32 - throw Exception(format("Can't resolve '%s': %d", host, err)); + throw system_error("getaddrinfo", WSAGetLastError()); #else - throw Exception(format("Can't resolve '%s': %s", host, gai_strerror(err))); + throw system_error("getaddrinfo", gai_strerror(err)); #endif }