-/* $Id$
-
-This file is part of libmspnet
-Copyright © 2008 Mikkosoft Productions, Mikko Rasa
-Distributed under the LGPL
-*/
-
#ifdef WIN32
#define _WIN32_WINNT 0x0501
#include <ws2tcpip.h>
SockAddr *resolve(const string &s, Family family)
{
string host, serv;
- unsigned colon=s.find(':');
- if(colon!=string::npos)
+ if(s[0]=='[')
{
- host=s.substr(0, colon);
- serv=s.substr(colon+1);
+ unsigned bracket = s.find(']');
+ host = s.substr(1, bracket-1);
+ unsigned colon = s.find(':', bracket);
+ if(colon!=string::npos)
+ serv = s.substr(colon+1);
}
else
- host=s;
+ {
+ unsigned colon = s.find(':');
+ if(colon!=string::npos)
+ {
+ host = s.substr(0, colon);
+ serv = s.substr(colon+1);
+ }
+ else
+ host = s;
+ }
- addrinfo hints={0, family, 0, 0, 0, 0, 0, 0};
+ addrinfo hints = {0, 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);
+ 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 *addr = SockAddr::create(*res->ai_addr);
freeaddrinfo(res);
return addr;
}
}
/*sockaddr sa;
- unsigned size=fill_sockaddr(sa);
+ unsigned size = fill_sockaddr(sa);
char hst[128];
char srv[128];
- int err=getnameinfo(&sa, size, hst, 128, srv, 128, 0);
+ int err = getnameinfo(&sa, size, hst, 128, srv, 128, 0);
if(err==0)
{
- host=hst;
- serv=srv;
+ host = hst;
+ serv = srv;
}*/
} // namespace Net