In: |
drb/drb.rb
|
Parent: | Object |
The default drb protocol.
Communicates over a TCP socket.
uri | [R] | Get the URI that we are connected to. |
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 827 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 792 def self.open(uri, config) host, port, option = 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 802 def self.open_server(uri, config) uri = 'druby://:0' unless uri host, port, opt = parse_uri(uri) if host.size == 0 soc = TCPServer.open(port) host = Socket.gethostname else soc = TCPServer.open(host, port) end port = soc.addr[1] if port == 0 uri = "druby://#{host}:#{port}" self.new(uri, soc, config) end
Parse uri into a [uri, option] pair.
# File drb/drb.rb, line 817 def self.uri_option(uri, config) host, port, option = parse_uri(uri) return "druby://#{host}:#{port}", option 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 886 def accept while true s = @socket.accept break if (@acl ? @acl.allow_socket?(s) : true) s.close end self.class.new(nil, s, @config) end
Check to see if this connection is alive.
# File drb/drb.rb, line 896 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 876 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 841 def peeraddr @socket.peeraddr end
On the client side, receive a reply from the server.
# File drb/drb.rb, line 864 def recv_reply @msg.recv_reply(stream) end
On the server side, receive a request from the client.
# File drb/drb.rb, line 854 def recv_request @msg.recv_request(stream) end
On the server side, send a reply to the client.
# File drb/drb.rb, line 859 def send_reply(succ, result) @msg.send_reply(stream, succ, result) end