Fix Windows networking bugs and connection metadata mismatch

- Use closesocket() instead of close() for sockets on Windows (lib/tcp.c)
- Call WSAStartup in tcp_init so outbound connections work (lib/tcp.c)
- Check WSAGetLastError() instead of errno for recv/send on Windows (lib/tcp.c)
- Use WSAEWOULDBLOCK instead of EINPROGRESS for non-blocking connect (lib/tcp.c)
- Add NULL guard in tcp_write for stale connection handles (lib/tcp.c)
- Fix ConnMetadata/TCP_Conn index mismatch in get_next_message: use
  event.handle.idx directly instead of searching for a free metadata
  slot, which could diverge when stale entries remain from failed
  outbound connections (lib/message.c)
- Initialize num_senders to 0 and skip unused metadata in
  find_conn_by_target (lib/message.c)
- Clear ready flag in http_server_next_request to prevent infinite
  loop (lib/http_server.c)
- Add CRT invalid parameter handler for the HTTP proxy (src/main.c)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-25 16:10:01 +01:00
co-authored by Claude Opus 4.6
parent 6b4f773052
commit 1b53abf633
5 changed files with 104 additions and 31 deletions
+1
View File
@@ -245,6 +245,7 @@ bool http_server_next_request(HTTP_Server *server,
continue;
if (server->conns[i].ready) {
server->conns[i].ready = false;
*request = &server->conns[i].request;
*builder = (HTTP_ResponseBuilder) {
.server = server,