summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2012-04-17 07:56:41 +0200
committerMartin Sustrik <sustrik@250bpm.com>2012-04-18 07:14:34 +0200
commitca8955058c2570df094cc97ed4e0757dc6647fd8 (patch)
tree0d281110541373b0bf65586aa067e489cad28d0e
parent94a8234624892d6fab8bd5255263c8bee7068ad6 (diff)
Discard pending surveys when (X)SURVEYOR socket disappears
This is an optimisation. The idea is that when surveyor disappears it makes no sense to process any surveys it have sent. There are two cases handled: - when (X)SURVEYOR socket is closed any unsent outbound messages are discarded - when (X)RESPONDENT detects that its peer have disconnected it drops any unprocessed messages that have been received from it Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
-rw-r--r--src/xrespondent.cpp4
-rw-r--r--src/xsurveyor.cpp4
2 files changed, 8 insertions, 0 deletions
diff --git a/src/xrespondent.cpp b/src/xrespondent.cpp
index 026fe8d..c16d900 100644
--- a/src/xrespondent.cpp
+++ b/src/xrespondent.cpp
@@ -36,6 +36,10 @@ xs::xrespondent_t::xrespondent_t (class ctx_t *parent_, uint32_t tid_,
{
options.type = XS_XRESPONDENT;
+ // If the connection disappears it makes no sense to read any more surveys
+ // from it. The responses will be unroutable anyway.
+ options.delay_on_disconnect = false;
+
prefetched_msg.init ();
}
diff --git a/src/xsurveyor.cpp b/src/xsurveyor.cpp
index 4265437..985b6d8 100644
--- a/src/xsurveyor.cpp
+++ b/src/xsurveyor.cpp
@@ -26,6 +26,10 @@ xs::xsurveyor_t::xsurveyor_t (class ctx_t *parent_, uint32_t tid_, int sid_) :
socket_base_t (parent_, tid_, sid_)
{
options.type = XS_XSURVEYOR;
+
+ // When the XSURVEYOR socket is close it makes no sense to send any pending
+ // surveys. The responses will be unroutable anyway.
+ options.delay_on_close = false;
}
xs::xsurveyor_t::~xsurveyor_t ()