2 #define _WIN32_WINNT 0x0501
7 #include <msp/core/systemerror.h>
8 #include <msp/strings/format.h>
17 SockAddr *resolve(const string &s, Family family)
22 unsigned bracket = s.find(']');
23 host = s.substr(1, bracket-1);
24 unsigned colon = s.find(':', bracket);
25 if(colon!=string::npos)
26 serv = s.substr(colon+1);
30 unsigned colon = s.find(':');
31 if(colon!=string::npos)
33 host = s.substr(0, colon);
34 serv = s.substr(colon+1);
40 addrinfo hints = {0, family, 0, 0, 0, 0, 0, 0};
42 const char *chost = (host.empty() ? 0 : host.c_str());
43 const char *cserv = (serv.empty() ? 0 : serv.c_str());
44 int err = getaddrinfo(chost, cserv, &hints, &res);
47 SockAddr *addr = SockAddr::create(*res->ai_addr);
53 throw system_error("getaddrinfo", WSAGetLastError());
55 throw system_error("getaddrinfo", gai_strerror(err));
60 unsigned size = fill_sockaddr(sa);
63 int err = getnameinfo(&sa, size, hst, 128, srv, 128, 0);