check for connect failure in syslog log opening
authorRich Felker <dalias@aerifal.cx>
Fri, 9 Jan 2015 05:09:54 +0000 (00:09 -0500)
committerRich Felker <dalias@aerifal.cx>
Fri, 9 Jan 2015 05:09:54 +0000 (00:09 -0500)
based on patch by Dima Krasner, with minor improvements for code size.
connect can fail if there is no listening syslogd, in which case a
useless socket was kept open, preventing subsequent syslog call from
attempting to connect again.

src/misc/syslog.c

index fdf90ba9fb074ddecb4353496dc12d579d84f601..fbce4bcd4011f826fde592bc86d1a57b524914d9 100644 (file)
@@ -46,8 +46,12 @@ void closelog(void)
 
 static void __openlog()
 {
-       log_fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
-       if (log_fd >= 0) connect(log_fd, (void *)&log_addr, sizeof log_addr);
+       int fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
+       if (fd < 0) return;
+       if (connect(fd, (void *)&log_addr, sizeof log_addr) < 0)
+               close(fd);
+       else
+               log_fd = fd;
 }
 
 void openlog(const char *ident, int opt, int facility)