busybox: Fixed remote logging bug in which starting syslog before the network (and...
authorDaniel Dickinson <crazycshore@gmail.com>
Sun, 27 Jun 2010 12:18:12 +0000 (12:18 +0000)
committerDaniel Dickinson <crazycshore@gmail.com>
Sun, 27 Jun 2010 12:18:12 +0000 (12:18 +0000)
SVN-Revision: 21961

package/busybox/patches/610-syslog-remote-retry-connection.patch [new file with mode: 0644]

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 (file)
index 0000000..5602e2b
--- /dev/null
@@ -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