def mainloop
while true
begin
quit if $interrupted > 0
connect
quit_msg = nil
while @socket.connected?
quit if $interrupted > 0
if @socket.select(1)
break unless reply = @socket.gets
@last_rec = Time.now
@client.process reply
else
ping_server
end
end
rescue SystemExit
log_session_end
exit 0
rescue Errno::ETIMEDOUT, Errno::ECONNABORTED, TimeoutError, SocketError => e
error "network exception: #{e.pretty_inspect}"
quit_msg = e.to_s
rescue BDB::Fatal => e
fatal "fatal bdb error: #{e.pretty_inspect}"
DBTree.stats
log_session_end
exit 2
rescue Exception => e
error "non-net exception: #{e.pretty_inspect}"
quit_msg = e.to_s
rescue => e
fatal "unexpected exception: #{e.pretty_inspect}"
log_session_end
exit 2
end
disconnect(quit_msg)
log "\n\nDisconnected\n\n"
quit if $interrupted > 0
log "\n\nWaiting to reconnect\n\n"
sleep @config['server.reconnect_wait']
end
end