]> git.tdb.fi Git - libs/net.git/blob - source/resolve.cpp
Fix a comparison operator on win32
[libs/net.git] / source / resolve.cpp
1 /* $Id$
2
3 This file is part of libmspnet
4 Copyright © 2008  Mikkosoft Productions, Mikko Rasa
5 Distributed under the LGPL
6 */
7
8 #ifdef WIN32
9 #define _WIN32_WINNT 0x0501
10 #include <ws2tcpip.h>
11 #else
12 #include <netdb.h>
13 #endif
14 #include <msp/strings/formatter.h>
15 #include "socket.h"
16 #include "resolve.h"
17
18 using namespace std;
19
20 namespace Msp {
21 namespace Net {
22
23 SockAddr *resolve(const string &s, Family family)
24 {
25         string host, serv;
26         unsigned colon=s.find(':');
27         if(colon!=string::npos)
28         {
29                 host=s.substr(0, colon);
30                 serv=s.substr(colon+1);
31         }
32         else
33                 host=s;
34
35         addrinfo hints={0, family, 0, 0, 0, 0, 0, 0};
36         addrinfo *res;
37         const char *chost=(host.empty() ? 0 : host.c_str());
38         const char *cserv=(serv.empty() ? 0 : serv.c_str());
39         int err=getaddrinfo(chost, cserv, &hints, &res);
40         if(err==0)
41         {
42                 SockAddr *addr=SockAddr::create(*res->ai_addr);
43                 freeaddrinfo(res);
44                 return addr;
45         }
46         else
47 #ifdef WIN32
48                 throw Exception(format("Can't resolve '%s': %d", host, err));
49 #else
50                 throw Exception(format("Can't resolve '%s': %s", host, gai_strerror(err)));
51 #endif
52 }
53
54                 /*sockaddr sa;
55                 unsigned size=fill_sockaddr(sa);
56                 char hst[128];
57                 char srv[128];
58                 int err=getnameinfo(&sa, size, hst, 128, srv, 128, 0);
59                 if(err==0)
60                 {
61                         host=hst;
62                         serv=srv;
63                 }*/
64
65 } // namespace Net
66 } // namespace Msp