Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
Lookups the IP address of host.
IPSocket.getaddress("localhost") #=> "127.0.0.1" IPSocket.getaddress("ip6-localhost") #=> "::1"
static VALUE ip_s_getaddress(VALUE obj, VALUE host) { struct sockaddr_storage addr; struct addrinfo *res = rsock_addrinfo(host, Qnil, SOCK_STREAM, 0); /* just take the first one */ memcpy(&addr, res->ai_addr, res->ai_addrlen); freeaddrinfo(res); return rsock_make_ipaddr((struct sockaddr*)&addr); }
Returns the local address as an array which contains address_family, port, hostname and numeric_address.
If reverse_lookup
is true
or
:hostname
, hostname is obtained from numeric_address using
reverse lookup. Or if it is false
, or :numeric
,
hostname is same as numeric_address. Or if it is nil
or
ommitted, obeys to ipsocket.do_not_reverse_lookup
. See
Socket.getaddrinfo
also.
TCPSocket.open("www.ruby-lang.org", 80) {|sock| p sock.addr #=> ["AF_INET", 49429, "hal", "192.168.0.128"] p sock.addr(true) #=> ["AF_INET", 49429, "hal", "192.168.0.128"] p sock.addr(false) #=> ["AF_INET", 49429, "192.168.0.128", "192.168.0.128"] p sock.addr(:hostname) #=> ["AF_INET", 49429, "hal", "192.168.0.128"] p sock.addr(:numeric) #=> ["AF_INET", 49429, "192.168.0.128", "192.168.0.128"] }
static VALUE ip_addr(int argc, VALUE *argv, VALUE sock) { rb_io_t *fptr; struct sockaddr_storage addr; socklen_t len = (socklen_t)sizeof addr; int norevlookup; GetOpenFile(sock, fptr); if (argc < 1 || !rsock_revlookup_flag(argv[0], &norevlookup)) norevlookup = fptr->mode & FMODE_NOREVLOOKUP; if (getsockname(fptr->fd, (struct sockaddr*)&addr, &len) < 0) rb_sys_fail("getsockname(2)"); return rsock_ipaddr((struct sockaddr*)&addr, norevlookup); }
Returns the remote address as an array which contains address_family, port, hostname and numeric_address. It is defined for connection oriented socket such as TCPSocket.
If reverse_lookup
is true
or
:hostname
, hostname is obtained from numeric_address using
reverse lookup. Or if it is false
, or :numeric
,
hostname is same as numeric_address. Or if it is nil
or
ommitted, obeys to ipsocket.do_not_reverse_lookup
. See
Socket.getaddrinfo
also.
TCPSocket.open("www.ruby-lang.org", 80) {|sock| p sock.peeraddr #=> ["AF_INET", 80, "carbon.ruby-lang.org", "221.186.184.68"] p sock.peeraddr(true) #=> ["AF_INET", 80, "221.186.184.68", "221.186.184.68"] p sock.peeraddr(false) #=> ["AF_INET", 80, "221.186.184.68", "221.186.184.68"] p sock.peeraddr(:hostname) #=> ["AF_INET", 80, "carbon.ruby-lang.org", "221.186.184.68"] p sock.peeraddr(:numeric) #=> ["AF_INET", 80, "221.186.184.68", "221.186.184.68"] }
static VALUE ip_peeraddr(int argc, VALUE *argv, VALUE sock) { rb_io_t *fptr; struct sockaddr_storage addr; socklen_t len = (socklen_t)sizeof addr; int norevlookup; GetOpenFile(sock, fptr); if (argc < 1 || !rsock_revlookup_flag(argv[0], &norevlookup)) norevlookup = fptr->mode & FMODE_NOREVLOOKUP; if (getpeername(fptr->fd, (struct sockaddr*)&addr, &len) < 0) rb_sys_fail("getpeername(2)"); return rsock_ipaddr((struct sockaddr*)&addr, norevlookup); }
Receives a message and return the message as a string and an address which the message come from.
maxlen is the maximum number of bytes to receive.
flags should be a bitwise OR of Socket::MSG_* constants.
ipaddr is same as IPSocket#{peeraddr,addr}.
u1 = UDPSocket.new u1.bind("127.0.0.1", 4913) u2 = UDPSocket.new u2.send "uuuu", 0, "127.0.0.1", 4913 p u1.recvfrom(10) #=> ["uuuu", ["AF_INET", 33230, "localhost", "127.0.0.1"]]
static VALUE ip_recvfrom(int argc, VALUE *argv, VALUE sock) { return rsock_s_recvfrom(sock, argc, argv, RECV_IP); }
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.