50 #include <sys/socket.h>
66 int unix_listen(
const char *addr,
int backlog,
int block_mode)
69 struct sockaddr_un sun;
70 ssize_t len = strlen(addr);
76 if (len >=
sizeof(sun.sun_path))
77 msg_fatal(
"unix-domain name too long: %s", addr);
78 memset((
void *) &sun, 0,
sizeof(sun));
79 sun.sun_family = AF_UNIX;
81 sun.sun_len = len + 1;
83 memcpy(sun.sun_path, addr, len + 1);
89 if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
91 if (unlink(addr) < 0 && errno != ENOENT)
93 if (bind(sock, (
struct sockaddr *) &sun,
sizeof(sun)) < 0)
95 #ifdef FCHMOD_UNIX_SOCKETS
96 if (fchmod(sock, 0666) < 0)
99 if (chmod(addr, 0666) < 0)
103 if (listen(sock, backlog) < 0)
int unix_listen(const char *addr, int backlog, int block_mode)
int sane_accept(int sock, struct sockaddr *sa, SOCKADDR_SIZE *len)
NORETURN msg_fatal(const char *fmt,...)
int non_blocking(int, int)