diff --git a/adsbus/incoming.c b/adsbus/incoming.c index 6466e0f..ae094e3 100644 --- a/adsbus/incoming.c +++ b/adsbus/incoming.c @@ -47,7 +47,7 @@ static void incoming_handler(struct peer *peer) { struct sockaddr peer_addr, 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) { fprintf(stderr, "I %s: Failed to accept new connection on %s/%s: %s\n", incoming->id, incoming->node, incoming->service, strerror(errno)); 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); 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); int optval = 1; diff --git a/adsbus/outgoing.c b/adsbus/outgoing.c index 29a70cc..fdca8d3 100644 --- a/adsbus/outgoing.c +++ b/adsbus/outgoing.c @@ -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); 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); int result = connect(outgoing->peer.fd, outgoing->addr->ai_addr, outgoing->addr->ai_addrlen); diff --git a/adsbus/peer.c b/adsbus/peer.c index e95ab71..e338bd3 100644 --- a/adsbus/peer.c +++ b/adsbus/peer.c @@ -36,7 +36,7 @@ void peer_init() { assert(peer_epoll_fd >= 0); int cancel_fds[2]; - assert(!pipe2(cancel_fds, O_NONBLOCK)); + assert(!pipe2(cancel_fds, O_CLOEXEC)); struct peer *cancel_peer = malloc(sizeof(*cancel_peer)); assert(cancel_peer);