IPSocket

IPSocket

TCPSocketUDPSocket의 부모(super class)가 되는 IP 소켓 클래스예요.

출처: Ruby 3.3 API

본문

IPSocketTCPSocketUDPSocket의 부모 클래스예요. IP 주소와 관련된 공통 기능을 제공하지요.

Public Class Methods

getaddress(host) → ipaddress

host의 IP 주소를 조회해요.

require 'socket'

IPSocket.getaddress("localhost")     #=> "127.0.0.1"
IPSocket.getaddress("ip6-localhost") #=> "::1"

Private Class Methods

getaddress_orig

getaddress의 원래 구현이에요.

valid_v6? (addr)

주어진 addr이 유효한 IPv6 주소인지 검사해요.

Public Instance Methods

addr([reverse_lookup]) → [address_family, port, hostname, numeric_address]

로컬 주소를 address_family, port, hostname, numeric_address를 담은 배열로 돌려줘요.

  • reverse_lookuptrue:hostname이면 numeric_address로부터 역방향 조회(reverse lookup)로 hostname을 얻어요.
  • false:numeric이면 hostnamenumeric_address와 같아요.
  • nil이거나 생략하면 ipsocket.do_not_reverse_lookup을 따르게 돼요. Socket.getaddrinfo도 함께 참고하세요.
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"]
}

inspect → string

IPSocket 객체를 설명하는 문자열을 돌려줘요.

peeraddr([reverse_lookup]) → [address_family, port, hostname, numeric_address]

원격 주소를 address_family, port, hostname, numeric_address를 담은 배열로 돌려줘요. TCPSocket 같은 연결 지향(connection oriented) 소켓을 위해 정의돼 있어요.

reverse_lookup 인자의 동작은 addr과 동일해요. Socket.getaddrinfo도 함께 참고하세요.

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, "carbon.ruby-lang.org", "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"]
}

recvfrom(maxlen) → [mesg, ipaddr]

메시지를 받아서 문자열 메시지와 그 메시지가 온 주소를 돌려줘요.

  • maxlen은 받을 최대 바이트 수예요.
  • flagsSocket::MSG_* 상수들을 비트 OR한 값이어야 해요.
  • ipaddrIPSocket#{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"]]