method
gethostbyaddr
v1_9_3_392 -
Show latest stable
- Class:
Socket
gethostbyaddr(p1, p2 = v2)public
Obtains the host information for address.
p Socket.gethostbyaddr([221,186,184,68].pack("CCCC")) #=> ["carbon.ruby-lang.org", [], 2, "\xDD\xBA\xB8D"]
static VALUE
sock_s_gethostbyaddr(int argc, VALUE *argv)
{
VALUE addr, family;
struct hostent *h;
char **pch;
VALUE ary, names;
int t = AF_INET;
rb_scan_args(argc, argv, "11", &addr, &family);
StringValue(addr);
if (!NIL_P(family)) {
t = rsock_family_arg(family);
}
#ifdef AF_INET6
else if (RSTRING_LEN(addr) == 16) {
t = AF_INET6;
}
#endif
h = gethostbyaddr(RSTRING_PTR(addr), RSTRING_LENINT(addr), t);
if (h == NULL) {
#ifdef HAVE_HSTRERROR
extern int h_errno;
rb_raise(rb_eSocket, "%s", (char*)hstrerror(h_errno));
#else
rb_raise(rb_eSocket, "host not found");
#endif
}
ary = rb_ary_new();
rb_ary_push(ary, rb_str_new2(h->h_name));
names = rb_ary_new();
rb_ary_push(ary, names);
if (h->h_aliases != NULL) {
for (pch = h->h_aliases; *pch; pch++) {
rb_ary_push(names, rb_str_new2(*pch));
}
}
rb_ary_push(ary, INT2NUM(h->h_addrtype));
#ifdef h_addr
for (pch = h->h_addr_list; *pch; pch++) {
rb_ary_push(ary, rb_str_new(*pch, h->h_length));
}
#else
rb_ary_push(ary, rb_str_new(h->h_addr, h->h_length));
#endif
return ary;
} Related methods
- Instance methods
- accept
- accept_nonblock
- bind
- connect
- connect_nonblock
- ipv6only!
- listen
- recvfrom
- recvfrom_nonblock
- sysaccept
- Class methods
- accept_loop
- getaddrinfo
- gethostbyaddr
- gethostbyname
- gethostname
- getnameinfo
- getservbyname
- getservbyport
- ip_address_list
- new
- pack_sockaddr_in
- pack_sockaddr_un
- pair
- sockaddr_in
- sockaddr_un
- socketpair
- tcp
- tcp_server_loop
- tcp_server_sockets
- udp_server_loop
- udp_server_loop_on
- udp_server_recv
- udp_server_sockets
- unix
- unix_server_loop
- unix_server_socket
- unpack_sockaddr_in
- unpack_sockaddr_un
- Private methods
-
unix_socket_abstract_name?