From 3d5d525eb525cfad8f643917c31e3d9fedce2874 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 6 Sep 2021 10:35:13 -0700 Subject: sockets: improve socked type patch. * socket.c (SOCK_NONBLOCK, SOCK_CLOEXEC): #define these as 0 if they are missing. (open_socket, socketpair_wrap): Clear the SOCK_NONBLOCK and SOCK_CLOEXEC flags in a single operation instead of two. Use C native arithmetic instead of Lisp logand and lognot. --- socket.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/socket.c b/socket.c index 2de2204e..37c7b730 100644 --- a/socket.c +++ b/socket.c @@ -1090,15 +1090,20 @@ static val sock_recv_timeout(val sock, val usec) } #endif +#ifndef SOCK_NONBLOCK +#define SOCK_NONBLOCK 0 +#endif + +#ifndef SOCK_CLOEXEC +#define SOCK_CLOEXEC 0 +#endif + static val open_socket(val family, val type, val mode_str) { val self = lit("open-socket"); int fd = socket(c_num(family, self), c_num(type, self), 0); -#ifdef SOCK_NONBLOCK - type = logand(type, lognot(num_fast(SOCK_NONBLOCK), nil)); -#endif -#ifdef SOCK_CLOEXEC - type = logand(type, lognot(num_fast(SOCK_CLOEXEC), nil)); +#if SOCK_NONBLOCK || SOCK_CLOEXEC + type = num_fast(c_num(type, self) & ~(SOCK_NONBLOCK | SOCK_CLOEXEC)); #endif return open_sockfd(num(fd), family, type, mode_str, self); } @@ -1116,11 +1121,8 @@ static val socketpair_wrap(val family, val type, val mode_str) uw_throwf(socket_error_s, lit("~a failed: ~d/~s"), self, num(errno), errno_to_str(errno), nao); -#ifdef SOCK_NONBLOCK - type = logand(type, lognot(num_fast(SOCK_NONBLOCK), nil)); -#endif -#ifdef SOCK_CLOEXEC - type = logand(type, lognot(num_fast(SOCK_CLOEXEC), nil)); +#if SOCK_NONBLOCK || SOCK_CLOEXEC + type = num_fast(c_num(type, self) & ~(SOCK_NONBLOCK | SOCK_CLOEXEC)); #endif { -- cgit v1.2.3