version 1.120, 2017/12/05 23:59:47 |
version 1.121, 2017/12/08 02:13:02 |
|
|
|
|
memset(&sunaddr, 0, sizeof(sunaddr)); |
memset(&sunaddr, 0, sizeof(sunaddr)); |
sunaddr.sun_family = AF_UNIX; |
sunaddr.sun_family = AF_UNIX; |
if (strlcpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path)) >= sizeof(sunaddr.sun_path)) { |
if (strlcpy(sunaddr.sun_path, path, |
error("%s: \"%s\" too long for Unix domain socket", __func__, |
sizeof(sunaddr.sun_path)) >= sizeof(sunaddr.sun_path)) { |
path); |
error("%s: path \"%s\" too long for Unix domain socket", |
|
__func__, path); |
errno = ENAMETOOLONG; |
errno = ENAMETOOLONG; |
return -1; |
return -1; |
} |
} |
|
|
sock = socket(PF_UNIX, SOCK_STREAM, 0); |
sock = socket(PF_UNIX, SOCK_STREAM, 0); |
if (sock < 0) { |
if (sock < 0) { |
saved_errno = errno; |
saved_errno = errno; |
error("socket: %.100s", strerror(errno)); |
error("%s: socket: %.100s", __func__, strerror(errno)); |
errno = saved_errno; |
errno = saved_errno; |
return -1; |
return -1; |
} |
} |
|
|
} |
} |
if (bind(sock, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) < 0) { |
if (bind(sock, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) < 0) { |
saved_errno = errno; |
saved_errno = errno; |
error("bind: %.100s", strerror(errno)); |
|
close(sock); |
close(sock); |
error("%s: cannot bind to path: %s", __func__, path); |
error("%s: cannot bind to path %s: %s", |
|
__func__, path, strerror(errno)); |
errno = saved_errno; |
errno = saved_errno; |
return -1; |
return -1; |
} |
} |
if (listen(sock, backlog) < 0) { |
if (listen(sock, backlog) < 0) { |
saved_errno = errno; |
saved_errno = errno; |
error("listen: %.100s", strerror(errno)); |
|
close(sock); |
close(sock); |
unlink(path); |
unlink(path); |
error("%s: cannot listen on path: %s", __func__, path); |
error("%s: cannot listen on path %s: %s", |
|
__func__, path, strerror(errno)); |
errno = saved_errno; |
errno = saved_errno; |
return -1; |
return -1; |
} |
} |