summaryrefslogtreecommitdiff
path: root/tcpclt.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2010-02-24 20:31:30 +0100
committerMichael Biebl <biebl@debian.org>2010-02-24 20:31:30 +0100
commit98a45d0b54c09ca82b3540491915ad6cc61c1a97 (patch)
tree0ec782ee7d1097acfdf2962b3b9b3404db314002 /tcpclt.c
parentb743785de633f7ff5c39f980496d359e4758ec83 (diff)
downloadrsyslog-98a45d0b54c09ca82b3540491915ad6cc61c1a97.tar.gz
Imported Upstream version 4.6.0upstream/4.6.0
Diffstat (limited to 'tcpclt.c')
-rw-r--r--tcpclt.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/tcpclt.c b/tcpclt.c
index c53f00f..617aaef 100644
--- a/tcpclt.c
+++ b/tcpclt.c
@@ -297,6 +297,12 @@ Send(tcpclt_t *pThis, void *pData, char *msg, size_t len)
CHKiRet(TCPSendBldFrame(pThis, &msg, &len, &bMsgMustBeFreed));
+ if(pThis->iRebindInterval > 0 && ++pThis->iNumMsgs == pThis->iRebindInterval) {
+ /* we need to rebind, and use the retry logic for this*/
+ CHKiRet(pThis->prepRetryFunc(pData)); /* try to recover */
+ pThis->iNumMsgs = 0;
+ }
+
while(!bDone) { /* loop is broken when send succeeds or error occurs */
CHKiRet(pThis->initFunc(pData));
iRet = pThis->sendFunc(pData, msg, len);
@@ -388,6 +394,13 @@ SetFraming(tcpclt_t *pThis, TCPFRAMINGMODE framing)
pThis->tcp_framing = framing;
RETiRet;
}
+static rsRetVal
+SetRebindInterval(tcpclt_t *pThis, int iRebindInterval)
+{
+ DEFiRet;
+ pThis->iRebindInterval = iRebindInterval;
+ RETiRet;
+}
/* Standard-Constructor
@@ -445,6 +458,7 @@ CODESTARTobjQueryInterface(tcpclt)
pIf->SetSendFrame = SetSendFrame;
pIf->SetSendPrepRetry = SetSendPrepRetry;
pIf->SetFraming = SetFraming;
+ pIf->SetRebindInterval = SetRebindInterval;
finalize_it:
ENDobjQueryInterface(tcpclt)