openwrtv3/package/busybox/patches/610-syslog-remote-retry-connection.patch

48 lines
1.3 KiB
Diff
Raw Normal View History

--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -98,6 +98,8 @@ struct globals {
GLOBALS
#if ENABLE_FEATURE_REMOTE_LOG
+ len_and_sockaddr *remoteAddr;
+ int remoteFD;
llist_t *remoteHosts;
#endif
#if ENABLE_FEATURE_IPC_SYSLOG
@@ -554,6 +556,7 @@ static void do_syslogd(void) NORETURN;
static void do_syslogd(void)
{
int sock_fd;
+ int send_err = 0;
#if ENABLE_FEATURE_REMOTE_LOG
llist_t *item;
#endif
@@ -637,10 +640,23 @@ static void do_syslogd(void)
continue;
}
/* Send message to remote logger, ignore possible error */
- /* TODO: on some errors, close and set G.remoteFD to -1
- * so that DNS resolution and connect is retried? */
- sendto(rh->remoteFD, recvbuf, sz+1, MSG_DONTWAIT,
- &(rh->remoteAddr->u.sa), rh->remoteAddr->len);
+ if (sendto(rh->remoteFD, recvbuf, sz+1, MSG_DONTWAIT,
+ &G.remoteAddr->u.sa, G.remoteAddr->len) == -1 ) {
+ send_err = errno;
+ }
+
+ /* On some errors, close and set G.remoteFD to -1
+ * so that DNS resolution and connect is retried */
+ switch (send_err) {
+ case ECONNRESET:
+ case EDESTADDRREQ:
+ case EISCONN:
+ case ENOTCONN:
+ case EPIPE:
+ close(G.remoteFD);
+ G.remoteFD = -1;
+ break;
+ }
}
#endif
if (!ENABLE_FEATURE_REMOTE_LOG || (option_mask32 & OPT_locallog)) {