summaryrefslogtreecommitdiff
path: root/package/busybox/patches/610-syslog-remote-retry-connection.patch
blob: 5602e2b51dd0aa952579e7abade53ce3f9d63172 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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