diff options
author | Glenn Strauss <gstrauss@gluelogic.com> | 2020-11-26 15:17:02 -0500 |
---|---|---|
committer | Glenn Strauss <gstrauss@gluelogic.com> | 2023-05-03 23:11:34 -0400 |
commit | abaf0a5f4d17206340f54420558fc7dfaae62e4f (patch) | |
tree | 10c041f2a1edc46e31424dde903d15b599c9b564 /src/network.c | |
parent | 9b9dd8efafbf74b173f7d79f791b0736c797900f (diff) | |
download | lighttpd-git-abaf0a5f4d17206340f54420558fc7dfaae62e4f.tar.gz |
[core] _WIN32 socket-compat, filesystem-compat
_WIN32 is sufficiently different -- *different*; not better -- that
isolating _WIN32 code is clearer than #ifdef _WIN32 in almost every
func in fdevent.c
_WIN32-specific fdevent_socket_* funcs
_WIN32 SOCKET fds must be closed with closesocket(), not close()
_WIN32 HANDLE_FLAG_INHERIT for FD_CLOEXEC
_WIN32 use _sopen_s() without _O_TEMPORARY
Use _sopen_s() without _O_TEMPORARY in fdevent_mkostemp().
_O_TEMPORARY would remove file once last handle to file is closed.
Temporary files in chunkqueue may be closed for large request/response
_WIN32 fdevent_rename() using MoveFileExA
_WIN32 rename() fails if the target file already exists.
Alternatives are MoveFileExA() or ReplaceFileA().
Both of the above fail if either oldfile or newfile are open, so
- not atomic
- may fail sporadically
Diffstat (limited to 'src/network.c')
-rw-r--r-- | src/network.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/network.c b/src/network.c index 6f1def5e..5341d5b3 100644 --- a/src/network.c +++ b/src/network.c @@ -472,8 +472,8 @@ static int network_server_init(server *srv, const network_socket_config *s, buff if (-1 != stdin_fd) { srv_socket->fd = stdin_fd; - if (-1 == fdevent_fcntl_set_nb_cloexec(stdin_fd)) { - log_perror(srv->errh, __FILE__, __LINE__, "fcntl"); + if (-1 == fdevent_socket_set_nb_cloexec(stdin_fd)) { + log_perror(srv->errh, __FILE__, __LINE__, "fcntl()"); return -1; } } else @@ -504,8 +504,8 @@ static int network_server_init(server *srv, const network_socket_config *s, buff return -1; } - if (-1 == fdevent_fcntl_set_nb(srv_socket->fd)) { - log_perror(srv->errh, __FILE__, __LINE__, "fcntl"); + if (-1 == fdevent_socket_set_nb(srv_socket->fd)) { + log_perror(srv->errh, __FILE__, __LINE__, "fcntl()"); return -1; } } else @@ -609,7 +609,7 @@ int network_close(server *srv) { server_socket *srv_socket = srv->srv_sockets.ptr[i]; if (srv_socket->fd != -1) { network_unregister_sock(srv, srv_socket); - close(srv_socket->fd); + fdio_close_socket(srv_socket->fd); } buffer_free(srv_socket->srv_token); @@ -624,7 +624,7 @@ int network_close(server *srv) { for (uint32_t i = 0; i < srv->srv_sockets_inherited.used; ++i) { server_socket *srv_socket = srv->srv_sockets_inherited.ptr[i]; if (srv_socket->fd != -1 && srv_socket->sidx != (unsigned short)~0u) { - close(srv_socket->fd); + fdio_close_socket(srv_socket->fd); } buffer_free(srv_socket->srv_token); @@ -647,7 +647,7 @@ void network_socket_activation_to_env (server * const srv) { server_socket *srv_socket = srv->srv_sockets.ptr[n]; if (srv_socket->fd < fd) continue; if (srv_socket->fd == fd) { - fdevent_clrfd_cloexec(fd); + (void)fdevent_socket_clr_cloexec(fd); ++fd; continue; } @@ -657,7 +657,7 @@ void network_socket_activation_to_env (server * const srv) { break; } if (i < srv->srv_sockets.used) { - fdevent_clrfd_cloexec(fd); + (void)fdevent_socket_clr_cloexec(fd); ++fd; --n; /* loop to reprocess this entry */ continue; @@ -812,7 +812,7 @@ int network_init(server *srv, int stdin_fd) { /*assert(buffer_eq_slen(b, CONST_STR_LEN("/dev/stdin")));*/ rc = (0 == srv->srv_sockets.used) ? network_server_init(srv, &p->defaults, b, 0, stdin_fd) - : close(stdin_fd);/*(graceful restart listening to "/dev/stdin")*/ + : fdio_close_socket(stdin_fd);/*(graceful restart; "/dev/stdin")*/ buffer_free(b); if (0 != rc) break; } |