aboutsummaryrefslogtreecommitdiffstats
path: root/package/busybox/patches/610-syslog-remote-retry-connection.patch
diff options
context:
space:
mode:
authorDaniel Dickinson <crazycshore@gmail.com>2010-06-27 12:18:12 +0000
committerDaniel Dickinson <crazycshore@gmail.com>2010-06-27 12:18:12 +0000
commitb86c99feb141180daf9911d10b102e919f35d008 (patch)
tree739bb8b436a5771e962a705e2bb979abd1a3493c /package/busybox/patches/610-syslog-remote-retry-connection.patch
parentbb44616ebe102f226b9ce43d9eebe027c399f751 (diff)
downloadupstream-b86c99feb141180daf9911d10b102e919f35d008.tar.gz
upstream-b86c99feb141180daf9911d10b102e919f35d008.tar.bz2
upstream-b86c99feb141180daf9911d10b102e919f35d008.zip
busybox: Fixed remote logging bug in which starting syslog before the network (and hence the remote host being available) results in failure to do any remote logging
SVN-Revision: 21961
Diffstat (limited to 'package/busybox/patches/610-syslog-remote-retry-connection.patch')
-rw-r--r--package/busybox/patches/610-syslog-remote-retry-connection.patch40
1 files changed, 40 insertions, 0 deletions
diff --git a/package/busybox/patches/610-syslog-remote-retry-connection.patch b/package/busybox/patches/610-syslog-remote-retry-connection.patch
new file mode 100644
index 0000000000..5602e2b51d
--- /dev/null
+++ b/package/busybox/patches/610-syslog-remote-retry-connection.patch
@@ -0,0 +1,40 @@
+Index: busybox-1.16.1/sysklogd/syslogd.c
+===================================================================
+--- busybox-1.16.1.orig/sysklogd/syslogd.c 2010-03-28 13:44:04.000000000 -0400
++++ busybox-1.16.1/sysklogd/syslogd.c 2010-06-17 21:48:11.000000000 -0400
+@@ -555,6 +555,7 @@
+ static void do_syslogd(void)
+ {
+ int sock_fd;
++ int send_err = 0;
+ #if ENABLE_FEATURE_SYSLOGD_DUP
+ int last_sz = -1;
+ char *last_buf;
+@@ -632,10 +633,23 @@
+ * over network, mimic that */
+ recvbuf[sz] = '\n';
+ /* 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(G.remoteFD, recvbuf, sz+1, MSG_DONTWAIT,
+- &G.remoteAddr->u.sa, G.remoteAddr->len);
++ if ( sendto(G.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;
++ }
+ no_luck: ;
+ }
+ #endif