18: def connect
19: retry_count = 0
20: server_to_use = nil
21: server_pool = @servers.dup.sort{ rand <=> rand }
22: begin
23: server_to_use = server_pool.shift
24: server_pool.push(server_to_use)
25:
26: Jabber::debuglog "timeout will be: #{@retry_sleep.to_f}"
27: Timeout.timeout(@retry_sleep.to_f){
28: Jabber::debuglog "trying to connect to #{server_to_use}"
29: super(server_to_use, @port)
30: }
31:
32: Jabber::debuglog self.jid.to_s + " connected to " + server_to_use.to_s
33: Jabber::debuglog "out of possible servers " + @servers.inspect
34: rescue Exception, Timeout::Error => e
35: Jabber::warnlog "#{server_to_use} error: #{e.inspect}. Will attempt to reconnect in #{@retry_sleep}"
36: sleep(@retry_sleep.to_f)
37: if(retry_count >= @max_retry.to_i)
38: Jabber::warnlog "reached max retry count on exception, failing"
39: raise e
40: end
41: retry_count += 1
42: retry
43: end
44: end