#include "ace/INET_Addr.h"#include "ace/Log_Msg.h"#include "ace/OS_NS_stdio.h"#include "ace/OS_NS_errno.h"#include "ace/OS_NS_stdlib.h"#include "ace/OS_Memory.h"#include "ace/OS_NS_arpa_inet.h"#include "ace/OS_NS_netdb.h"#include "ace/OS_NS_unistd.h"#include "ace/OS_NS_sys_socket.h"
Go to the source code of this file.
Functions | |
| ACE_RCSID (ace, INET_Addr,"$Id: INET_Addr.cpp 84183 2009-01-19 08:50:16Z johnnyw $") 1int ACE_INET_Addr | |
| static int | get_port_number_from_name (const char port_name[], const char protocol[]) |
| ACE_RCSID | ( | ace | , | |
| INET_Addr | , | |||
| "$Id: INET_Addr.cpp 84183 2009-01-19 08:50:16Z johnnyw $" | ||||
| ) |
Definition at line 21 of file INET_Addr.cpp.
: INET_Addr.cpp 84183 2009-01-19 08:50:16Z johnnyw $") ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_ALLOC_HOOK_DEFINE(ACE_INET_Addr) // Transform the current address into string format. int ACE_INET_Addr::addr_to_string (ACE_TCHAR s[], size_t size, int ipaddr_format) const { ACE_TRACE ("ACE_INET_Addr::addr_to_string"); // XXX Can we (should we) include the scope id for IPv6 addresses? char hoststr[MAXHOSTNAMELEN+1]; bool result = false; if (ipaddr_format == 0) result = (this->get_host_name (hoststr, MAXHOSTNAMELEN+1) == 0); else result = (this->get_host_addr (hoststr, MAXHOSTNAMELEN+1) != 0); if (!result) return -1; size_t total_len = ACE_OS::strlen (hoststr) + 5 // ACE_OS::strlen ("65535"), Assuming the max port number. + 1 // sizeof (':'), addr/port sep + 1; // sizeof ('\0'), terminating NUL #if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) ACE_TCHAR const *format = ACE_TEXT("%ls:%d"); #else ACE_TCHAR const *format = ACE_TEXT("%s:%d"); #endif /* !ACE_WIN32 && ACE_USES_WCHAR */ #if defined (ACE_HAS_IPV6) if (ACE_OS::strchr (hoststr, ACE_TEXT (':')) != 0) { total_len += 2; // ACE_OS::strlen ("[]") IPv6 addr frames # if !defined (ACE_WIN32) && defined (ACE_USES_WCHAR) format = ACE_TEXT("[%ls]:%d"); # else format = ACE_TEXT("[%s]:%d"); # endif /* !ACE_WIN32 && ACE_USES_WCHAR */ } #endif // ACE_HAS_IPV6 if (size < total_len) return -1; else ACE_OS::sprintf (s, format, ACE_TEXT_CHAR_TO_TCHAR (hoststr), this->get_port_number ()); return 0; }
| static int get_port_number_from_name | ( | const char | port_name[], | |
| const char | protocol[] | |||
| ) | [static] |
Definition at line 431 of file INET_Addr.cpp.
{
// Maybe port_name is directly a port number?
char *endp = 0;
long port_number = ACE_OS::strtol (port_name, &endp, 10);
if (*endp == '\0')
{
// port_name was really a number, and nothing else.
// Check for overflow.
if (port_number < 0 || port_number > ACE_MAX_DEFAULT_PORT)
return -1;
// Return the port number. NOTE: this number must
// be returned in network byte order!
u_short n = static_cast<u_short> (port_number);
n = ACE_HTONS (n);
return n;
}
// We try to resolve port number from its name.
#if defined (ACE_LACKS_GETSERVBYNAME)
port_number = 0;
ACE_UNUSED_ARG (port_name);
ACE_UNUSED_ARG (protocol);
#else
port_number = -1;
servent sentry;
ACE_SERVENT_DATA buf;
servent *sp = ACE_OS::getservbyname_r (port_name,
protocol,
&sentry,
buf);
if (sp != 0)
port_number = sp->s_port;
#endif /* ACE_LACKS_GETSERVBYNAME */
return port_number;
}
1.7.0