#endif
#include <msp/core/systemerror.h>
#include <msp/strings/format.h>
+#include "sockaddr_private.h"
#include "socket.h"
#include "resolve.h"
host = s;
}
- addrinfo hints = { 0, family_to_sys(family), 0, 0, 0, 0, 0, 0 };
+ unsigned flags = 0;
+ if(host=="*")
+ {
+ flags = AI_PASSIVE;
+ host = string();
+ }
+
+ addrinfo hints = { flags, 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::new_from_sys(sa);
freeaddrinfo(res);
return addr;
}