handle loss of syslog socket connection
authorRich Felker <dalias@aerifal.cx>
Thu, 9 Jul 2015 18:36:02 +0000 (18:36 +0000)
committerRich Felker <dalias@aerifal.cx>
Thu, 9 Jul 2015 18:47:48 +0000 (18:47 +0000)
commit0f9c2666aca95eb98eb0ef4f4d8d1473c8ce3fa0
tree0a330d08acc9af2dd995da3ba667b12546422542
parent11894f6d3a80be950a490dc7dfab349f057a545f
handle loss of syslog socket connection

when traditional syslogd implementations are restarted, the old server
socket ceases to exist and a new unix socket with the same pathname is
created. when this happens, the default destination address associated
with the client socket via connect is no longer valid, and attempts to
send produce errors. this happens despite the socket being datagram
type, and is in contrast to the behavior that would be seen with an IP
datagram (UDP) socket.

in order to avoid a situation where the application is unable to send
further syslog messages without calling closelog, this patch makes
syslog attempt to reconnect the socket when send returns an error
indicating a lost connection.

additionally, initial failure to connect the socket no longer results
in the socket being closed. this ensures that an application which
calls openlog to reserve the socket file descriptor will not run into
a situation where transient connection failure (e.g. due to syslogd
restart) prevents fd reservation. however, applications which may be
unable to connect the socket later (e.g. due to chroot, restricted
permissions, seccomp, etc.) will still fail to log if the syslog
socket cannot be connected at openlog time or if it has to be
reconnected later.
src/misc/syslog.c