changed the way to set/unset O_NONBLOCK & O_CLOEXEC
This commit is contained in:
parent
1d6951f22d
commit
34e5508881
60
lib/hcl-s.c
60
lib/hcl-s.c
@ -1936,17 +1936,30 @@ hcl_server_t* hcl_server_open (hcl_mmgr_t* mmgr, hcl_oow_t xtnsize, hcl_server_p
|
|||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(O_CLOEXEC)
|
#if defined(O_NONBLOCK) || defined(O_CLOEXEC)
|
||||||
fcv = fcntl(pfd[0], F_GETFD, 0);
|
fcv = fcntl(pfd[0], F_GETFD, 0);
|
||||||
if (fcv >= 0) fcntl(pfd[0], F_SETFD, fcv | O_CLOEXEC);
|
if (fcv >= 0)
|
||||||
|
{
|
||||||
|
#if defined(O_NONBLOCK)
|
||||||
|
fcv |= O_NONBLOCK;
|
||||||
|
#endif
|
||||||
|
#if defined(O_CLOEXEC)
|
||||||
|
fcv |= O_CLOEXEC;
|
||||||
|
#endif
|
||||||
|
fcntl(pfd[0], F_SETFD, fcv);
|
||||||
|
}
|
||||||
|
|
||||||
fcv = fcntl(pfd[1], F_GETFD, 0);
|
fcv = fcntl(pfd[1], F_GETFD, 0);
|
||||||
if (fcv >= 0) fcntl(pfd[1], F_SETFD, fcv | O_CLOEXEC);
|
if (fcv >= 0)
|
||||||
#endif
|
{
|
||||||
#if defined(O_NONBLOCK)
|
#if defined(O_NONBLOCK)
|
||||||
fcv = fcntl(pfd[0], F_GETFL, 0);
|
fcv |= O_NONBLOCK;
|
||||||
if (fcv >= 0) fcntl(pfd[0], F_SETFL, fcv | O_NONBLOCK);
|
#endif
|
||||||
fcv = fcntl(pfd[1], F_GETFL, 0);
|
#if defined(O_CLOEXEC)
|
||||||
if (fcv >= 0) fcntl(pfd[1], F_SETFL, fcv | O_NONBLOCK);
|
fcv |= O_CLOEXEC;
|
||||||
|
#endif
|
||||||
|
fcntl(pfd[1], F_SETFD, fcv);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
xtn = (dummy_hcl_xtn_t*)hcl_getxtn(hcl);
|
xtn = (dummy_hcl_xtn_t*)hcl_getxtn(hcl);
|
||||||
@ -2443,13 +2456,19 @@ static int setup_listeners (hcl_server_t* server, const hcl_bch_t* addrs)
|
|||||||
optval = 1;
|
optval = 1;
|
||||||
setsockopt (srv_fd, SOL_SOCKET, SO_REUSEADDR, &optval, HCL_SIZEOF(int));
|
setsockopt (srv_fd, SOL_SOCKET, SO_REUSEADDR, &optval, HCL_SIZEOF(int));
|
||||||
|
|
||||||
#if defined(O_CLOEXEC)
|
#if defined(O_NONBLOCK) || defined(O_CLOEXEC)
|
||||||
fcv = fcntl(srv_fd, F_GETFD, 0);
|
fcv = fcntl(srv_fd, F_GETFD, 0);
|
||||||
if (fcv >= 0) fcntl(srv_fd, F_SETFD, fcv | O_CLOEXEC);
|
if (fcv >= 0)
|
||||||
#endif
|
{
|
||||||
#if defined(O_NONBLOCK)
|
#if defined(O_NONBLOCK)
|
||||||
fcv = fcntl(srv_fd, F_GETFL, 0);
|
fcv |= O_NONBLOCK;
|
||||||
if (fcv >= 0) fcntl(srv_fd, F_SETFL, fcv | O_NONBLOCK);
|
#endif
|
||||||
|
#if defined(O_CLOEXEC)
|
||||||
|
fcv |= O_CLOEXEC;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fcntl(srv_fd, F_SETFL, fcv);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (bind(srv_fd, (struct sockaddr*)&srv_addr, srv_len) == -1)
|
if (bind(srv_fd, (struct sockaddr*)&srv_addr, srv_len) == -1)
|
||||||
@ -2590,9 +2609,18 @@ int hcl_server_start (hcl_server_t* server, const hcl_bch_t* addrs)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(O_CLOEXEC)
|
#if defined(O_NONBLOCK) || defined(O_CLOEXEC)
|
||||||
fcv = fcntl(cli_fd, F_GETFD, 0);
|
fcv = fcntl(cli_fd, F_GETFD, 0);
|
||||||
if (fcv >= 0) fcntl(cli_fd, F_SETFD, fcv | O_CLOEXEC);
|
if (fcv >= 0)
|
||||||
|
{
|
||||||
|
#if defined(O_NONBLOCK)
|
||||||
|
fcv &= ~O_NONBLOCK; // force the accepted socket to be blocking
|
||||||
|
#endif
|
||||||
|
#if defined(O_CLOEXEC)
|
||||||
|
fcv |= O_CLOEXEC;
|
||||||
|
#endif
|
||||||
|
fcntl(cli_fd, F_SETFD, fcv);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (server->cfg.worker_max_count > 0)
|
if (server->cfg.worker_max_count > 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user