Hi, I had some problems running syslogd on a machine where another process had a 514 socket bound to a specific address. As this is not a real conflict, I think syslogd should bind *:514 with SO_REUSEADDR. This is already the case with all other sockets.
ok? bluhm Index: usr.sbin/syslogd/syslogd.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/syslogd/syslogd.c,v retrieving revision 1.179 diff -u -p -r1.179 syslogd.c --- usr.sbin/syslogd/syslogd.c 27 Aug 2015 17:53:35 -0000 1.179 +++ usr.sbin/syslogd/syslogd.c 31 Aug 2015 00:10:02 -0000 @@ -334,7 +334,7 @@ void usage(void); void wallmsg(struct filed *, struct iovec *); int loghost_parse(char *, char **, char **, char **); int getmsgbufsize(void); -int socket_bind(const char *, const char *, const char *, int, int, +int socket_bind(const char *, const char *, const char *, int, int *, int *); int unix_socket(char *, int, mode_t); void double_rbuf(int); @@ -450,7 +450,7 @@ main(int argc, char *argv[]) die(0); } - if (socket_bind("udp", NULL, "syslog", 0, SecureMode, + if (socket_bind("udp", NULL, "syslog", SecureMode, &fd_udp, &fd_udp6) == -1) { errno = 0; logerror("socket bind *"); @@ -458,7 +458,7 @@ main(int argc, char *argv[]) die(0); } fd_bind = -1; - if (bind_host && socket_bind("udp", bind_host, bind_port, 1, 0, + if (bind_host && socket_bind("udp", bind_host, bind_port, 0, &fd_bind, &fd_bind) == -1) { errno = 0; logerror("socket bind udp"); @@ -466,7 +466,7 @@ main(int argc, char *argv[]) die(0); } fd_listen = -1; - if (listen_host && socket_bind("tcp", listen_host, listen_port, 1, 0, + if (listen_host && socket_bind("tcp", listen_host, listen_port, 0, &fd_listen, &fd_listen) == -1) { errno = 0; logerror("socket listen tcp"); @@ -695,12 +695,12 @@ main(int argc, char *argv[]) int socket_bind(const char *proto, const char *host, const char *port, - int reuseaddr, int shutread, int *fd, int *fd6) + int shutread, int *fd, int *fd6) { struct addrinfo hints, *res, *res0; char hostname[NI_MAXHOST], servname[NI_MAXSERV]; char ebuf[ERRBUFSIZE]; - int *fdp, error; + int *fdp, error, reuseaddr; *fd = *fd6 = -1; if (proto == NULL) @@ -761,6 +761,7 @@ socket_bind(const char *proto, const cha *fdp = -1; continue; } + reuseaddr = 1; if (setsockopt(*fdp, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr)) == -1) { snprintf(ebuf, sizeof(ebuf), "setsockopt SO_REUSEADDR "