From 9dc3d5418a017639a7be7f5b7ad4ff404c3f1aa4 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Mon, 23 Mar 2020 16:33:32 +0000 Subject: [PATCH] made some conditional changes to mod-sys.c --- hawk/lib/mod-sys.c | 54 +++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/hawk/lib/mod-sys.c b/hawk/lib/mod-sys.c index 5d5c203f..73d08dba 100644 --- a/hawk/lib/mod-sys.c +++ b/hawk/lib/mod-sys.c @@ -69,6 +69,24 @@ #define FLOCK_GET (1 << 30) #define FLOCK_WAIT (1 << 31) +#if defined(SOCK_CLOEXEC) +# define X_SOCK_CLOEXEC SOCK_CLOEXEC +#else +# define X_SOCK_CLOEXEC 0 /* 0 is effectless for a bit flag */ +#endif + +#if defined(SOCK_CLOEXEC) +# define X_SOCK_CLOEXEC SOCK_NONBLOCK +#else +# define X_SOCK_NONBLOCK 0 /* 0 is effectless for a bit flag */ +#endif + +#if defined(SO_REUSEPORT) +# define X_SO_REUSEPORT SO_REUSEPORT +#else +# define X_SO_REUSEPORT 9999999 /* this must be a non-existent code */ +#endif + /* * IMPLEMENTATION NOTE: * - hard failure only if it cannot make a final return value. (e.g. fnc_errmsg, fnc_fork, fnc_getpid) @@ -1973,15 +1991,19 @@ static int fnc_sleep (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) rx = sleep(nt.sec); #endif #elif defined(HAVE_NANOSLEEP) - struct timespec req; - req.tv_sec = nt.sec; - req.tv_nsec = nt.nsec; - rx = nanosleep(&req, HAWK_NULL); + { + struct timespec req; + req.tv_sec = nt.sec; + req.tv_nsec = nt.nsec; + rx = nanosleep(&req, HAWK_NULL); + } #elif defined(HAVE_SELECT) - struct timeval req; - req.tv_sec = nt.sec; - req.tv_usec = HAWK_NSEC_TO_USEC(nt.nsec); - rx = select(0, HAWK_NULL, HAWK_NULL, HAWK_NULL, &req); + { + struct timeval req; + req.tv_sec = nt.sec; + req.tv_usec = HAWK_NSEC_TO_USEC(nt.nsec); + rx = select(0, HAWK_NULL, HAWK_NULL, HAWK_NULL, &req); + } #else /* no high-resolution sleep() is available */ rx = sleep(nt.sec); @@ -3935,11 +3957,11 @@ static int fnc_accept (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi) fd_flags = fcntl(fd, F_GETFD, 0); if (fd_flags >= 0) { - #if defined(FD_CLOEXEC) - if (flags & SOCK_NONBLOCK) fd_flags |= FD_CLOEXEC; + #if defined(FD_CLOEXEC) && defined(SOCK_CLOEXEC) + if (flags & SOCK_CLOEXEC) fd_flags |= FD_CLOEXEC; #endif - #if defined(O_NONBLOCK) - if (flags & SOCK_CLOEXEC) fd_flags |= O_NONBLOCK; + #if defined(O_NONBLOCK) && defined(SOCK_NONBLOCK) + if (flags & SOCK_NONBLOCK) fd_flags |= O_NONBLOCK; #endif fcntl(fd, F_SETFD, fd_flags); } @@ -4694,9 +4716,9 @@ static inttab_t inttab[] = { HAWK_T("SIGSEGV"), { SIGSEGV } }, { HAWK_T("SIGTERM"), { SIGTERM } }, - { HAWK_T("SOCK_CLOEXEC"), { SOCK_CLOEXEC } }, + { HAWK_T("SOCK_CLOEXEC"), { X_SOCK_CLOEXEC } }, { HAWK_T("SOCK_DGRAM"), { SOCK_DGRAM } }, - { HAWK_T("SOCK_NONBLOCK"), { SOCK_NONBLOCK } }, + { HAWK_T("SOCK_NONBLOCK"), { X_SOCK_NONBLOCK } }, { HAWK_T("SOCK_STREAM"), { SOCK_STREAM } }, { HAWK_T("SOL_SOCKET"), { SOL_SOCKET } }, @@ -4707,9 +4729,7 @@ static inttab_t inttab[] = { HAWK_T("SO_RCVBUF"), { SO_RCVBUF } }, { HAWK_T("SO_RCVTIMEO"), { SO_RCVTIMEO } }, { HAWK_T("SO_REUSEADDR"), { SO_REUSEADDR } }, -#if defined(SO_REUSEPORT) - { HAWK_T("SO_REUSEPORT"), { SO_REUSEPORT } }, -#endif + { HAWK_T("SO_REUSEPORT"), { X_SO_REUSEPORT } }, { HAWK_T("SO_SNDBUF"), { SO_SNDBUF } }, { HAWK_T("SO_SNDTIMEO"), { SO_SNDTIMEO } },