Class: IPSocket

Inherits:
BasicSocket show all
Defined in:
lib/socket/ip_socket.rb

Direct Known Subclasses

TCPSocket, UDPSocket

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BasicSocket

#close_read, #close_write, #connect_address, do_not_reverse_lookup, #do_not_reverse_lookup, do_not_reverse_lookup=, #do_not_reverse_lookup=, for_fd, #getpeereid, #getpeername, #getsockname, #getsockopt, #local_address, #recv, #recv_nonblock, #recvmsg, #recvmsg_nonblock, #remote_address, #send, #sendmsg, #sendmsg_nonblock, #setsockopt, #shutdown

Class Method Details

.getaddress(host) ⇒ Object



4
5
6
# File 'lib/socket/ip_socket.rb', line 4

def self.getaddress(host)
  RubySL::Socket::Foreign.getaddress(host)
end

Instance Method Details

#addr(reverse_lookup = nil) ⇒ Object



8
9
10
# File 'lib/socket/ip_socket.rb', line 8

def addr(reverse_lookup = nil)
  RubySL::Socket.address_info(:getsockname, self, reverse_lookup)
end

#peeraddr(reverse_lookup = nil) ⇒ Object



12
13
14
# File 'lib/socket/ip_socket.rb', line 12

def peeraddr(reverse_lookup=nil)
  RubySL::Socket.address_info(:getpeername, self, reverse_lookup)
end

#recvfrom(maxlen, flags = 0) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/socket/ip_socket.rb', line 16

def recvfrom(maxlen, flags = 0)
  flags = 0 if flags.nil?

  message, addr = recvmsg(maxlen, flags)

  aname    = RubySL::Socket.address_family_name(addr.afamily)
  hostname = addr.ip_address

  # We're re-using recvmsg which doesn't return the reverse hostname, thus
  # we'll do an extra lookup in case this is needed.
  unless do_not_reverse_lookup
    addrinfos = Socket.getaddrinfo(addr.ip_address, nil, addr.afamily,
                                   addr.socktype, addr.protocol, 0, true)

    unless addrinfos.empty?
      hostname = addrinfos[0][2]
    end
  end

  return message, [aname, addr.ip_port, hostname, addr.ip_address]
end