]> git.tdb.fi Git - libs/net.git/blobdiff - source/resolve.cpp
Add ClientSocket and ServerSocket abstractions
[libs/net.git] / source / resolve.cpp
index 31b15fb9dd40ece09c09d2e25515bce25c2e00fd..076fea065dee3960abc755d03e816d9fbcac909a 100644 (file)
@@ -6,6 +6,7 @@
 #endif
 #include <msp/core/systemerror.h>
 #include <msp/strings/format.h>
+#include "sockaddr_private.h"
 #include "socket.h"
 #include "resolve.h"
 
@@ -37,14 +38,19 @@ 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<const char *>(res->ai_addr);
+               char *dptr = reinterpret_cast<char *>(&sa.addr);
+               copy(sptr, sptr+res->ai_addrlen, dptr);
+               SockAddr *addr = SockAddr::from_sys(sa);
                freeaddrinfo(res);
                return addr;
        }