UNIXServer
UNIXServer (UNIX 도메인 스트림 서버 소켓)
UNIXServer는 UNIX 도메인 스트림 서버 소켓을 나타내는 클래스예요. 같은 머신 안의 프로세스끼리 통신할 때 빈번하게 쓰는 유닉스 소켓의 서버 쪽이에요.
출처: Ruby 3.3 API
본문
new(path) → unixserver
path에 바인딩된 새 UNIX 서버 소켓을 만들어요.
require 'socket'
serv = UNIXServer.new("/tmp/sock")
s = serv.accept
p s.read
accept → unixsocket
들어오는 연결을 받아들여요. 새로운 UNIXSocket 객체를 돌려줘요.
UNIXServer.open("/tmp/sock") {|serv|
UNIXSocket.open("/tmp/sock") {|c|
s = serv.accept
s.puts "hi"
s.close
p c.read #=> "hi\n"
}
}
accept_nonblock([options]) → unixsocket
기본 파일 디스크립터에 O_NONBLOCK이 설정된 뒤 accept(2)를 사용해 들어오는 연결을 받아들여요. 들어온 연결에 대해 수락된 UNIXSocket을 돌려줘요.
require 'socket'
serv = UNIXServer.new("/tmp/sock")
begin # emulate blocking accept
sock = serv.accept_nonblock
rescue IO::WaitReadable, Errno::EINTR
IO.select([serv])
retry
end
# sock is an accepted socket.
listen(int) → 0
주어진 int를 backlog로 사용해 연결을 기다려요. listen은 소켓이 SOCK_STREAM 또는 SOCK_SEQPACKET 타입일 때만 적용돼요. backlog는 대기 중인 연결의 최대 큐 길이예요.
require 'socket'
include Socket::Constants
socket = Socket.new(AF_INET, SOCK_STREAM, 0)
sockaddr = Socket.pack_sockaddr_in(2200, 'localhost')
socket.bind(sockaddr)
socket.listen(5)
sysaccept → file_descriptor
새 연결을 받아들여요. 정수인 새 파일 디스크립터를 돌려줘요.
UNIXServer.open("/tmp/sock") {|serv|
UNIXSocket.open("/tmp/sock") {|c|
fd = serv.sysaccept
s = IO.new(fd)
s.puts "hi"
s.close
p c.read #=> "hi\n"
}
}