Class: TCPServer
- Inherits:
-
TCPSocket
- Object
- IO
- BasicSocket
- IPSocket
- TCPSocket
- TCPServer
- Defined in:
- lib/socket/tcp_server.rb
Instance Method Summary collapse
- #accept ⇒ Object
- #accept_nonblock ⇒ Object
-
#initialize(host, service = nil) ⇒ TCPServer
constructor
A new instance of TCPServer.
- #listen(backlog) ⇒ Object
- #sysaccept ⇒ Object
Methods inherited from TCPSocket
gethostbyname, #local_address, #remote_address
Methods inherited from IPSocket
#addr, getaddress, #peeraddr, #recvfrom
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
Constructor Details
#initialize(host, service = nil) ⇒ TCPServer
Returns a new instance of TCPServer.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/socket/tcp_server.rb', line 2 def initialize(host, service = nil) @no_reverse_lookup = self.class.do_not_reverse_lookup if host.is_a?(Fixnum) and service.nil? service = host host = nil end if host.is_a?(String) and service.nil? begin service = Integer(host) rescue ArgumentError raise SocketError, "invalid port number: #{host}" end host = nil end unless service.is_a?(Fixnum) service = RubySL::Socket.coerce_to_string(service) end if host host = RubySL::Socket.coerce_to_string(host) else host = '' end remote_addrs = Socket .getaddrinfo(host, service, :UNSPEC, :STREAM, 0, Socket::AI_PASSIVE) remote_addrs.each do |addrinfo| _, port, address, _, family, socktype, protocol = addrinfo descriptor = RubySL::Socket::Foreign.socket(family, socktype, protocol) next if descriptor < 0 status = RubySL::Socket::Foreign .bind(descriptor, Socket.sockaddr_in(port, address)) if status < 0 RubySL::Socket::Foreign.close(descriptor) Errno.handle('bind(2)') else IO.setup(self, descriptor, nil, true) binmode setsockopt(:SOCKET, :REUSEADDR, true) break end end listen(5) end |
Instance Method Details
#accept ⇒ Object
63 64 65 66 67 |
# File 'lib/socket/tcp_server.rb', line 63 def accept socket, _ = RubySL::Socket.accept(self, TCPSocket) socket end |
#accept_nonblock ⇒ Object
69 70 71 72 73 |
# File 'lib/socket/tcp_server.rb', line 69 def accept_nonblock socket, _ = RubySL::Socket.accept_nonblock(self, TCPSocket) socket end |
#listen(backlog) ⇒ Object
59 60 61 |
# File 'lib/socket/tcp_server.rb', line 59 def listen(backlog) RubySL::Socket.listen(self, backlog) end |
#sysaccept ⇒ Object
75 76 77 |
# File 'lib/socket/tcp_server.rb', line 75 def sysaccept accept.fileno end |