Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
The default drb protocol.
Communicates over a TCP socket.
# File drb/drb.rb, line 830 def self.getservername host = Socket::gethostname begin Socket::gethostbyname(host)[0] rescue 'localhost' end end
Create a new DRbTCPSocket instance.
uri
is the URI we are connected to. soc
is the
tcp socket we are bound to. config
is our configuration.
# File drb/drb.rb, line 880 def initialize(uri, soc, config={}) @uri = uri @socket = soc @config = config @acl = config[:tcp_acl] @msg = DRbMessage.new(config) set_sockopt(@socket) end
Open a client connection to uri
using configuration
config
.
# File drb/drb.rb, line 822 def self.open(uri, config) host, port, = parse_uri(uri) host.untaint port.untaint soc = TCPSocket.open(host, port) self.new(uri, soc, config) end
Open a server listening for connections at uri
using
configuration config
.
# File drb/drb.rb, line 853 def self.open_server(uri, config) uri = 'druby://:0' unless uri host, port, _ = parse_uri(uri) config = {:tcp_original_host => host}.update(config) if host.size == 0 host = getservername soc = open_server_inaddr_any(host, port) else soc = TCPServer.open(host, port) end port = soc.addr[1] if port == 0 config[:tcp_port] = port uri = "druby://#{host}:#{port}" self.new(uri, soc, config) end
# File drb/drb.rb, line 839 def self.open_server_inaddr_any(host, port) infos = Socket::getaddrinfo(host, nil, Socket::AF_UNSPEC, Socket::SOCK_STREAM, 0, Socket::AI_PASSIVE) families = Hash[*infos.collect { |af, *_| af }.uniq.zip([]).flatten] return TCPServer.open('0.0.0.0', port) if families.has_key?('AF_INET') return TCPServer.open('::', port) if families.has_key?('AF_INET6') return TCPServer.open(port) end
On the server side, for an instance returned by open_server, accept a client connection and return a new instance to handle the server’s side of this client-server session.
# File drb/drb.rb, line 939 def accept while true s = @socket.accept break if (@acl ? @acl.allow_socket?(s) : true) s.close end if @config[:tcp_original_host].to_s.size == 0 uri = "druby://#{s.addr[3]}:#{@config[:tcp_port]}" else uri = @uri end self.class.new(uri, s, @config) end
Check to see if this connection is alive.
# File drb/drb.rb, line 954 def alive? return false unless @socket if IO.select([@socket], nil, nil, 0) close return false end true end
Close the connection.
If this is an instance returned by open_server, then this stops listening for new connections altogether. If this is an instance returned by open or by accept, then it closes this particular client-server session.
# File drb/drb.rb, line 929 def close if @socket @socket.close @socket = nil end end
Get the address of our TCP peer (the other end of the socket we are bound to.
# File drb/drb.rb, line 894 def peeraddr @socket.peeraddr end
On the client side, receive a reply from the server.
# File drb/drb.rb, line 917 def recv_reply @msg.recv_reply(stream) end
On the server side, receive a request from the client.
# File drb/drb.rb, line 907 def recv_request @msg.recv_request(stream) end
On the server side, send a reply to the client.
# File drb/drb.rb, line 912 def send_reply(succ, result) @msg.send_reply(stream, succ, result) end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.