summaryrefslogtreecommitdiff
path: root/yhttpd/src/glob.h
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-07-02 00:53:24 +0300
committerPaul Buetow <paul@buetow.org>2026-07-02 00:53:24 +0300
commit58602a28d2c92b603208f3e01c14c169d28cc7b0 (patch)
tree502d2e187ea29f2cc840e22d299d752d59088a3c /yhttpd/src/glob.h
parent6c3a65b577f002f3219d03498c66205434765179 (diff)
yhttpd: port ychat fixes, get it building + stable in Docker (task 9s0)
Ports the ychat revival fixes (unsigned/size_t npos truncation, ofstream == NULL, tool::trim OOB, CGI popen -> execve, www.yChat.org links, g++ version gate, config.pl -I., NCURSES/CLI-disabled build) so yhttpd builds on modern GCC in a Rocky Linux 9 container, plus yhttpd-specific fixes found while verifying it under concurrent load: - listen() backlog was hardcoded to 1; bumped to SOMAXCONN. - sock::_close() closed sockets with unread request bytes still in the kernel receive buffer (read_http() only reads the GET line), so Linux sent an abortive RST instead of a FIN, racing the client's read of the response ("connection reset by peer" even though it was delivered). Fixed with a non-blocking, bounded drain before close() - confirmed via tcpdump: RSTs on every response before, zero after, across 140+ requests / concurrent bursts of 20. - Removed a duplicate _make_server_socket() call in start() (wrap.cpp's init_wrapper() already makes it before start() runs) that leaked a fd and would have double-initialized SSL if OPENSSL is ever enabled; caught by fresh-context review, documented honestly in DOCKER.md. - src/configure's dependency-checker predates 64-bit multilib distros (only checked /usr/lib, never /usr/lib64) and was missing an ncur move-aside entry for the NCURSES-disabled build. Added Dockerfile/.dockerignore/DOCKER.md documenting the build, the fixes, and the one known-but-unfixed landmine (a SIGILL heap corruption in sock::_close that reproduces on newer host GCC/glibc but not in the container - latent, not fixed). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Diffstat (limited to 'yhttpd/src/glob.h')
-rw-r--r--yhttpd/src/glob.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/yhttpd/src/glob.h b/yhttpd/src/glob.h
index a2c1334..2283f1e 100644
--- a/yhttpd/src/glob.h
+++ b/yhttpd/src/glob.h
@@ -24,7 +24,7 @@
/* - CONFIG -
Should yhttpd get compiled with comand line interface support?
*/
-#define CLI
+//#define CLI
/* - CONFIG -
What should be the name of the config file?
@@ -70,7 +70,7 @@
/* - CONFIG -
Should yhttpd get compiled with ncurses support?
*/
-#define NCURSES
+//#define NCURSES
/* - CONFIG -
Please specify the maximum length of a HTTP post request.
@@ -84,12 +84,20 @@
#define READBUF 2048
/* - CONFIG -
- Please specify the maximum length of a line read from a socket
+ Please specify the maximum length of a line read from a socket
or a file. ( config-file, html-template )
*/
#define READSOCK 2048
/* - CONFIG -
+ Upper bound (bytes) on how much unread request data sock::_close() will
+ drain from a socket before giving up and closing anyway. Bounds the
+ non-blocking drain loop against a client that keeps streaming data after
+ we've half-closed the connection.
+*/
+#define DRAINMAX 8192
+
+/* - CONFIG -
In which prefix should yhttpd be installed if typing gmake inst-
all?
*/
@@ -175,7 +183,7 @@
using namespace std;
-typedef int function( void *v_arg );
+typedef int mod_func_t( void *v_arg );
struct container
{
@@ -184,7 +192,7 @@ struct container
struct dynmod
{
- function *the_func ;
+ mod_func_t *the_func ;
void *the_module;
};