Class: TCPServer
- Defined in:
- mrbgems/mruby-socket/mrblib/socket.rb
Instance Attribute Summary
Attributes inherited from BasicSocket
Instance Method Summary collapse
-
#accept ⇒ Object
call-seq: tcpserver.accept -> tcpsocket.
-
#accept_nonblock ⇒ Object
call-seq: tcpserver.accept_nonblock -> unixsocket.
-
#initialize(host = nil, service) ⇒ TCPServer
constructor
call-seq: TCPServer.new(host=nil, service) -> tcpserver.
-
#listen(backlog) ⇒ Object
call-seq: unixserver.listen(backlog) -> 0.
-
#sysaccept ⇒ Object
call-seq: tcpserver.sysaccept -> integer.
Methods inherited from IPSocket
#addr, getaddress, #peeraddr, #recvfrom
Methods inherited from BasicSocket
do_not_reverse_lookup, do_not_reverse_lookup=, for_fd, #local_address, #recv_nonblock, #remote_address
Methods inherited from IO
#each, #each_byte, #each_char, #hash, open, pipe, popen, #pos=, #printf, read, #rewind
Constructor Details
#initialize(host = nil, service) ⇒ TCPServer
call-seq:
TCPServer.new(host=nil, service) -> tcpserver
Creates a new TCP server socket bound to the given host and service. If host is nil, binds to all available interfaces.
server = TCPServer.new("localhost", 8080)
server = TCPServer.new(nil, 3000) # binds to all interfaces
server = TCPServer.new("0.0.0.0", "http")
569 570 571 572 573 574 575 576 577 578 579 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 569 def initialize(host=nil, service) ai = Addrinfo.getaddrinfo(host, service, nil, nil, nil, Socket::AI_PASSIVE)[0] @init_with_fd = true super(Socket._socket(ai.afamily, Socket::SOCK_STREAM, 0), "r+") if Socket.const_defined?(:SO_REUSEADDR) self.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true) end Socket._bind(self.fileno, ai.to_sockaddr) listen(5) self end |
Instance Method Details
#accept ⇒ Object
call-seq:
tcpserver.accept -> tcpsocket
Accepts an incoming connection and returns a new TCPSocket.
server = TCPServer.new(8080)
client = server.accept
590 591 592 593 594 595 596 597 598 599 600 601 602 603 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 590 def accept fd = self.sysaccept begin s = TCPSocket._allocate s.instance_eval{ @init_with_fd = true } s.__send__(:initialize, fd, "r+") s rescue => e IO._sysclose(fd) rescue nil raise e end end |
#accept_nonblock ⇒ Object
call-seq:
tcpserver.accept_nonblock -> unixsocket
Accepts an incoming connection without blocking. May raise an exception if no connection is available.
client = server.accept_nonblock
614 615 616 617 618 619 620 621 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 614 def accept_nonblock begin self._setnonblock(true) self.accept ensure self._setnonblock(false) end end |
#listen(backlog) ⇒ Object
call-seq:
unixserver.listen(backlog) -> 0
Sets the socket to listen for incoming connections with the given backlog.
server.listen(5)
server.listen(128)
632 633 634 635 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 632 def listen(backlog) Socket._listen(self.fileno, backlog) 0 end |
#sysaccept ⇒ Object
call-seq:
tcpserver.sysaccept -> integer
Accepts an incoming connection and returns the file descriptor.
fd = server.sysaccept
645 646 647 |
# File 'mrbgems/mruby-socket/mrblib/socket.rb', line 645 def sysaccept Socket._accept(self.fileno) end |