Cleanup socket creation

This commit is contained in:
Marc André Tanner 2015-02-25 23:27:44 +01:00
parent 2dd042f974
commit 7962cb99f3
1 changed files with 15 additions and 11 deletions

View File

@ -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) {