diff --git a/server.c b/server.c index 26a7eb6..b1f3ef3 100644 --- a/server.c +++ b/server.c @@ -38,18 +38,22 @@ static int server_create_socket(const char *name) { if (fd == -1) return -1; socklen_t socklen = offsetof(struct sockaddr_un, sun_path) + strlen(sockaddr.sun_path) + 1; - mode_t mode = umask(S_IXUSR|S_IXGRP|S_IRWXO); - if (bind(fd, (struct sockaddr*)&sockaddr, socklen) == -1) - goto error1; - umask(mode); - if (listen(fd, 5) == -1) - goto error2; + mode_t mask = umask(S_IXUSR|S_IRWXG|S_IRWXO); + int r = bind(fd, (struct sockaddr*)&sockaddr, socklen); + umask(mask); + + if (r == -1) { + close(fd); + return -1; + } + + if (listen(fd, 5) == -1) { + unlink(sockaddr.sun_path); + close(fd); + return -1; + } + return fd; -error2: - unlink(sockaddr.sun_path); -error1: - close(fd); - return -1; } static int server_set_socket_non_blocking(int sock) {