@host = opts[:host]
@port = opts[:port]
@db = opts[:db]
- @sock = connect_to_server
- call_command(["select",@db]) if @db != 0
+ connect_to_server
end
def to_s
end
def connect_to_server
- TCPSocket.new(@host, @port, 0)
+ @sock = TCPSocket.new(@host, @port, 0)
+ call_command(["select",@db]) if @db != 0
end
def method_missing(*argv)
end
def call_command(argv)
+ # this wrapper to raw_call_command handle reconnection on socket
+ # error. We try to reconnect just one time, otherwise let the error
+ # araise.
+ begin
+ raw_call_command(argv)
+ rescue Errno::ECONNRESET
+ @sock.close
+ connect_to_server
+ raw_call_command(argv)
+ end
+ end
+
+ def raw_call_command(argv)
bulk = nil
argv[0] = argv[0].to_s.downcase
if BulkCommands[argv[0]]
def read_reply
line = @sock.gets
+ raise Errno::ECONNRESET,"Connection lost" if !line
case line[0..0]
when "-"
raise line.strip