IPSocket
IPSocket
TCPSocket와 UDPSocket의 부모(super class)가 되는 IP 소켓 클래스예요.
출처: Ruby 3.3 API
본문
IPSocket는 TCPSocket와 UDPSocket의 부모 클래스예요. 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_lookup이true나:hostname이면numeric_address로부터 역방향 조회(reverse lookup)로hostname을 얻어요.false나:numeric이면hostname이numeric_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은 받을 최대 바이트 수예요.flags는Socket::MSG_*상수들을 비트 OR한 값이어야 해요.ipaddr는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"]]