Correct connect() documentation, don't delay attempts if reattempt=False.

See issue #152
This commit is contained in:
Lance Stout 2012-03-20 09:54:29 -07:00
parent 859822ff05
commit 59d1b8e131

View File

@ -370,8 +370,10 @@ class XMLStream(object):
use_tls=True, reattempt=True): use_tls=True, reattempt=True):
"""Create a new socket and connect to the server. """Create a new socket and connect to the server.
Setting ``reattempt`` to ``True`` will cause connection attempts to Setting ``reattempt`` to ``True`` will cause connection
be made every second until a successful connection is established. attempts to be made with an exponential backoff delay (max of
:attr:`reconnect_max_delay` which defaults to 10 minute) until a
successful connection is established.
:param host: The name of the desired server for the connection. :param host: The name of the desired server for the connection.
:param port: Port to connect to on the server. :param port: Port to connect to on the server.
@ -401,7 +403,7 @@ class XMLStream(object):
# is established. # is established.
attempts = self.reconnect_max_attempts attempts = self.reconnect_max_attempts
connected = self.state.transition('disconnected', 'connected', connected = self.state.transition('disconnected', 'connected',
func=self._connect) func=self._connect, args=(reattempt,))
while reattempt and not connected and not self.stop.is_set(): while reattempt and not connected and not self.stop.is_set():
connected = self.state.transition('disconnected', 'connected', connected = self.state.transition('disconnected', 'connected',
func=self._connect) func=self._connect)
@ -413,14 +415,14 @@ class XMLStream(object):
return False return False
return connected return connected
def _connect(self): def _connect(self, reattempt=True):
self.scheduler.remove('Session timeout check') self.scheduler.remove('Session timeout check')
self.stop.clear() self.stop.clear()
if self.default_domain: if self.default_domain:
self.address = self.pick_dns_answer(self.default_domain, self.address = self.pick_dns_answer(self.default_domain,
self.address[1]) self.address[1])
if self.reconnect_delay is None: if self.reconnect_delay is None or not reattempt:
delay = 1.0 delay = 1.0
else: else:
delay = min(self.reconnect_delay * 2, self.reconnect_max_delay) delay = min(self.reconnect_delay * 2, self.reconnect_max_delay)
@ -454,7 +456,8 @@ class XMLStream(object):
except Socket.gaierror: except Socket.gaierror:
log.warning("Socket could not be opened: no connectivity" + \ log.warning("Socket could not be opened: no connectivity" + \
" or wrong IP versions.") " or wrong IP versions.")
self.reconnect_delay = delay if reattempt:
self.reconnect_delay = delay
return False return False
self.configure_socket() self.configure_socket()
@ -462,7 +465,8 @@ class XMLStream(object):
if self.use_proxy: if self.use_proxy:
connected = self._connect_proxy() connected = self._connect_proxy()
if not connected: if not connected:
self.reconnect_delay = delay if reattempt:
self.reconnect_delay = delay
return False return False
if self.use_ssl and self.ssl_support: if self.use_ssl and self.ssl_support:
@ -504,7 +508,8 @@ class XMLStream(object):
self.event('socket_error', serr, direct=True) self.event('socket_error', serr, direct=True)
log.error(error_msg, self.address[0], self.address[1], log.error(error_msg, self.address[0], self.address[1],
serr.errno, serr.strerror) serr.errno, serr.strerror)
self.reconnect_delay = delay if reattempt:
self.reconnect_delay = delay
return False return False
def _connect_proxy(self): def _connect_proxy(self):