Precise reconnect interval randomised

Till now the random fraction of the reconnect interval was
computed based on process ID. This patch uses pseudo-random
generated (seeded by exact time of when the process was
started) to compute the interval.

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This commit is contained in:
Martin Sustrik 2011-07-28 09:02:54 +02:00
parent ce7a9a58e3
commit 6e987428d4
2 changed files with 4 additions and 14 deletions

View File

@ -25,6 +25,7 @@
#include "tcp_engine.hpp"
#include "io_thread.hpp"
#include "platform.hpp"
#include "random.hpp"
#include "ip.hpp"
#include "err.hpp"
@ -154,15 +155,9 @@ void zmq::tcp_connecter_t::add_reconnect_timer()
int zmq::tcp_connecter_t::get_new_reconnect_ivl ()
{
#if defined ZMQ_HAVE_WINDOWS
int pid = (int) GetCurrentProcessId ();
#else
int pid = (int) getpid ();
#endif
// The new interval is the current interval + random value.
int this_interval = current_reconnect_ivl +
((pid * 13) % options.reconnect_ivl);
(generate_random () % options.reconnect_ivl);
// Only change the current reconnect interval if the maximum reconnect
// interval was set and if it's larger than the reconnect interval.

View File

@ -28,6 +28,7 @@
#include "tcp_engine.hpp"
#include "io_thread.hpp"
#include "platform.hpp"
#include "random.hpp"
#include "likely.hpp"
#include "ip.hpp"
#include "err.hpp"
@ -169,15 +170,9 @@ void zmq::vtcp_connecter_t::add_reconnect_timer()
int zmq::vtcp_connecter_t::get_new_reconnect_ivl ()
{
#if defined ZMQ_HAVE_WINDOWS
int pid = (int) GetCurrentProcessId ();
#else
int pid = (int) getpid ();
#endif
// The new interval is the current interval + random value.
int this_interval = current_reconnect_ivl +
((pid * 13) % options.reconnect_ivl);
(generate_random () % options.reconnect_ivl);
// Only change the current reconnect interval if the maximum reconnect
// interval was set and if it's larger than the reconnect interval.