Sprinkle CLOEXEC around.
This commit is contained in:
@@ -47,7 +47,7 @@ static void incoming_handler(struct peer *peer) {
|
|||||||
struct sockaddr peer_addr, local_addr;
|
struct sockaddr peer_addr, local_addr;
|
||||||
socklen_t peer_addrlen = sizeof(peer_addr), local_addrlen = sizeof(local_addr);
|
socklen_t peer_addrlen = sizeof(peer_addr), local_addrlen = sizeof(local_addr);
|
||||||
|
|
||||||
int fd = accept4(incoming->peer.fd, &peer_addr, &peer_addrlen, SOCK_NONBLOCK);
|
int fd = accept4(incoming->peer.fd, &peer_addr, &peer_addrlen, SOCK_NONBLOCK | SOCK_CLOEXEC);
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
fprintf(stderr, "I %s: Failed to accept new connection on %s/%s: %s\n", incoming->id, incoming->node, incoming->service, strerror(errno));
|
fprintf(stderr, "I %s: Failed to accept new connection on %s/%s: %s\n", incoming->id, incoming->node, incoming->service, strerror(errno));
|
||||||
return;
|
return;
|
||||||
@@ -81,7 +81,7 @@ static void incoming_listen(struct incoming *incoming) {
|
|||||||
assert(getnameinfo(addr->ai_addr, addr->ai_addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0);
|
assert(getnameinfo(addr->ai_addr, addr->ai_addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0);
|
||||||
fprintf(stderr, "I %s: Listening on %s/%s...\n", incoming->id, hbuf, sbuf);
|
fprintf(stderr, "I %s: Listening on %s/%s...\n", incoming->id, hbuf, sbuf);
|
||||||
|
|
||||||
incoming->peer.fd = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
|
incoming->peer.fd = socket(addr->ai_family, addr->ai_socktype | SOCK_CLOEXEC, addr->ai_protocol);
|
||||||
assert(incoming->peer.fd >= 0);
|
assert(incoming->peer.fd >= 0);
|
||||||
|
|
||||||
int optval = 1;
|
int optval = 1;
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ static void outgoing_connect_next(struct outgoing *outgoing) {
|
|||||||
assert(getnameinfo(outgoing->addr->ai_addr, outgoing->addr->ai_addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0);
|
assert(getnameinfo(outgoing->addr->ai_addr, outgoing->addr->ai_addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0);
|
||||||
fprintf(stderr, "O %s: Connecting to %s/%s...\n", outgoing->id, hbuf, sbuf);
|
fprintf(stderr, "O %s: Connecting to %s/%s...\n", outgoing->id, hbuf, sbuf);
|
||||||
|
|
||||||
outgoing->peer.fd = socket(outgoing->addr->ai_family, outgoing->addr->ai_socktype | SOCK_NONBLOCK, outgoing->addr->ai_protocol);
|
outgoing->peer.fd = socket(outgoing->addr->ai_family, outgoing->addr->ai_socktype | SOCK_NONBLOCK | SOCK_CLOEXEC, outgoing->addr->ai_protocol);
|
||||||
assert(outgoing->peer.fd >= 0);
|
assert(outgoing->peer.fd >= 0);
|
||||||
|
|
||||||
int result = connect(outgoing->peer.fd, outgoing->addr->ai_addr, outgoing->addr->ai_addrlen);
|
int result = connect(outgoing->peer.fd, outgoing->addr->ai_addr, outgoing->addr->ai_addrlen);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ void peer_init() {
|
|||||||
assert(peer_epoll_fd >= 0);
|
assert(peer_epoll_fd >= 0);
|
||||||
|
|
||||||
int cancel_fds[2];
|
int cancel_fds[2];
|
||||||
assert(!pipe2(cancel_fds, O_NONBLOCK));
|
assert(!pipe2(cancel_fds, O_CLOEXEC));
|
||||||
|
|
||||||
struct peer *cancel_peer = malloc(sizeof(*cancel_peer));
|
struct peer *cancel_peer = malloc(sizeof(*cancel_peer));
|
||||||
assert(cancel_peer);
|
assert(cancel_peer);
|
||||||
|
|||||||
Reference in New Issue
Block a user