gresolver_ipv4.cpp
Go to the documentation of this file.
1 //
2 // Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
16 // ===
17 //
18 // gresolver_ipv4.cpp
19 //
20 
21 #include "gdef.h"
22 #include "gresolver.h"
23 
24 unsigned int GNet::Resolver::resolveService( const std::string & service_name , bool udp , std::string & error )
25 {
26  servent * service = ::getservbyname( service_name.c_str() , udp ? "udp" : "tcp" ) ;
27  if( service == NULL )
28  {
29  error = "invalid service name" ;
30  return 0U ;
31  }
32  else
33  {
34  Address service_address( *service ) ;
35  return service_address.port() ;
36  }
37 }
38 
39 std::string GNet::Resolver::resolveHost( const std::string & host_name , unsigned int port , ResolverInfo & result )
40 {
41  hostent * host = ::gethostbyname( host_name.c_str() ) ;
42  if( host == NULL )
43  return std::string("no such host: \"") + host_name + "\"" ;
44 
45  const char * h_name = host->h_name ;
46  result.update( Address(*host,port) , std::string(h_name?h_name:"") ) ;
47  return std::string() ;
48 }
49