diff --git a/monitor.c b/monitor.c index 65bd368c..6c48ecf9 100644 --- a/monitor.c +++ b/monitor.c @@ -74,7 +74,7 @@ monitor_setup_sockets(void) { /* ignore SIGPIPE so that we don't explode */ signal(SIGPIPE, SIG_IGN); - if ((monitor_named_socket = socket_bind(confValueGet("monitor.socket", DEFAULT_MONITOR_SOCKET_NAME))) == -1) { + if ((monitor_named_socket = socket_bind(confValueGet("monitor.socket", DEFAULT_MONITOR_SOCKET_NAME), 0)) == -1) { WHY_perror("bind"); goto error; } diff --git a/overlay_mdp.c b/overlay_mdp.c index 32a77a1e..e4093bd9 100644 --- a/overlay_mdp.c +++ b/overlay_mdp.c @@ -21,27 +21,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include int mdp_socket = -1; -int overlay_mdp_setup_sockets() -{ - struct sockaddr_un name; - socklen_t len; - int reuseP, send_buffer_size; +int +overlay_mdp_setup_sockets(void) { + int send_buffer_size; if (mdp_socket != -1) return 0; - socket_setname(&name, confValueGet("mdp.socket", DEFAULT_MDP_SOCKET_NAME), &len); - - mdp_socket = socket(AF_UNIX, SOCK_DGRAM, 0); - reuseP = 1; - if(setsockopt(mdp_socket, SOL_SOCKET, SO_REUSEADDR, - &reuseP, sizeof(reuseP)) < 0) { - WARN_perror("setsockopt"); - goto error; - } - if (bind(mdp_socket, (struct sockaddr *)&name, len) == -1) { - WARN_perror("bind"); - goto error; + if ((mdp_socket = socket_bind(confValueGet("mdp.socket", DEFAULT_MDP_SOCKET_NAME), 1)) == -1) { + WHY_perror("socket_bind"); + goto error; } send_buffer_size = 64 * 1024; diff --git a/socket.c b/socket.c index 13ca5c79..f9086a40 100644 --- a/socket.c +++ b/socket.c @@ -39,14 +39,23 @@ * more than one servald on a given system. */ int -socket_bind(const char *name) { - int s, oerrno; +socket_bind(const char *name, int reuse) { + int s, oerrno, reuseP; struct sockaddr_un sockname; socklen_t len; if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) return -1; + if (reuse) { + reuseP = 1; + if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, + &reuseP, sizeof(reuseP)) < 0) { + close(s); + return -1; + } + } + socket_setname(&sockname, name, &len); unlink(sockname.sun_path); diff --git a/socket.h b/socket.h index df18259b..0b86e70d 100644 --- a/socket.h +++ b/socket.h @@ -1,4 +1,4 @@ -int socket_bind(const char *name); +int socket_bind(const char *name, int reuse); void socket_setname(struct sockaddr_un *sockname, const char *name, socklen_t *len); void socket_done(const char *name);