def mainloop
while true
begin
quit if $interrupted > 0
connect
@timer.start
while @socket.connected?
if @socket.select
break unless reply = @socket.gets
@client.process reply
end
quit if $interrupted > 0
end
rescue SystemExit
log_session_end
exit 0
rescue Errno::ETIMEDOUT, TimeoutError, SocketError => e
error "network exception: #{e.class}: #{e}"
debug e.backtrace.join("\n")
rescue BDB::Fatal => e
fatal "fatal bdb error: #{e.class}: #{e}"
fatal e.backtrace.join("\n")
DBTree.stats
log_session_end
exit 2
rescue Exception => e
error "non-net exception: #{e.class}: #{e}"
error e.backtrace.join("\n")
rescue => e
fatal "unexpected exception: #{e.class}: #{e}"
fatal e.backtrace.join("\n")
log_session_end
exit 2
end
stop_server_pings
@channels.clear
if @socket.connected?
@socket.clearq
@socket.shutdown
end
log "disconnected"
quit if $interrupted > 0
log "waiting to reconnect"
sleep @config['server.reconnect_wait']
end
end