curl/lib/vquic
Viktor Szakats 51d8213579
core: stop redefining E* macros on Windows, map EACCES, related fixes
Before this patch, standard `E*` errno codes were redefined on Windows,
onto matching winsock2 `WSA*` error codes, which have different values.
This broke uses where using the `E*` value in non-socket context, or
other places expecting a POSIX `errno`, e.g. file I/O, threads, IDN or
interfacing with dependencies.

Fix it by introducing a curl-specific `SOCKE*` set of macros that map to
`WSA*` on Windows and standard POSIX codes on other platforms. Then
verify and update the code to use `SOCKE*` or `E*` macro depending on
context.

- Add `SOCKE*` macros that map to either winsock2 or POSIX error codes.
  And use them with `SOCKERRNO` or in contexts requiring
  platform-dependent socket error codes.

  This fixes `E*` uses which were supposed be POSIX values, not `WSA*`
  socket errors, on Windows:
  - lib/curl_multibyte.c
  - lib/curl_threads.c
  - lib/idn.c
  - lib/vtls/gtls.c
  - lib/vtls/rustls.c
  - src/tool_cb_wrt.c
  - src/tool_dirhie.c

- Ban `E*` codes having a `SOCKE*` mapping, via checksrc.
  Authored-by: Daniel Stenberg

- Add exceptions for `E*` codes used in file I/O, or other contexts
  requiring POSIX error codes.

Also:
- ftp: fix missing `SOCKEACCES` mapping for Windows.
- add `SOCKENOMEM` for `Curl_getaddrinfo()` via `asyn-thread.c`.
- tests/server/sockfilt: fix to set `SOCKERRNO` in local `select()`
  override on Windows.
- lib/inet_ntop: fix to return `WSAEINVAL` on Windows, where `ENOSPC` is
  used on other platforms. To simulate Windows' built-in `inet_ntop()`,
  as tested on a Win10 machine.
  Note:
  - WINE returns `STATUS_INVALID_PARAMETER` = `0xC000000D`.
  - Microsoft documentation says it returns `WSA_INVALID_PARAMETER`
    (= `ERROR_INVALID_PARAMETER`) 87:
    https://learn.microsoft.com/windows/win32/api/ws2tcpip/nf-ws2tcpip-inet_ntop#return-value
- lib/inet_ntop: drop redundant `CURL_SETERRNO(ENOSPC)`.
  `inet_ntop4()` already sets it before returning `NULL`.
- replace stray `WSAEWOULDBLOCK` with `USE_WINSOCK` macro to detect
  winsock2.
- move existing `SOCKE*` mappings from `tests/server` to
  `curl_setup_once.h`.
- add missing `EINTR`, `EINVAL` constants for WinCE.

Follow-up to abf80aae38 #16612
Follow-up to d69425ed7d #16615
Bug: https://github.com/curl/curl/pull/16553#issuecomment-2704679377

Closes #16621
2025-03-13 00:03:25 +01:00
..
.checksrc strparse: switch to curl_off_t as base data type 2025-02-15 21:58:48 +01:00
curl_msh3.c build: enable -Wcast-qual, fix or silence compiler warnings 2025-03-10 22:30:15 +01:00
curl_msh3.h quic: rename vquic implementations, fix for quiche build. 2023-01-05 23:39:49 +01:00
curl_ngtcp2.c build: enable -Wcast-qual, fix or silence compiler warnings 2025-03-10 22:30:15 +01:00
curl_ngtcp2.h ngtcp2: adjust config and code checks for ngtcp2 without nghttp3 2023-03-23 15:39:13 +01:00
curl_osslq.c build: enable -Wcast-qual, fix or silence compiler warnings 2025-03-10 22:30:15 +01:00
curl_osslq.h http3: initial support for OpenSSL 3.2 QUIC stack 2024-01-22 16:15:45 +01:00
curl_quiche.c build: enable -Wcast-qual, fix or silence compiler warnings 2025-03-10 22:30:15 +01:00
curl_quiche.h quic: rename vquic implementations, fix for quiche build. 2023-01-05 23:39:49 +01:00
vquic-tls.c OpenSSL/quictls: add support for TLSv1.3 early data 2025-03-03 09:27:04 +01:00
vquic-tls.h wolfssl: tls early data support 2025-02-24 10:01:51 +01:00
vquic.c core: stop redefining E* macros on Windows, map EACCES, related fixes 2025-03-13 00:03:25 +01:00
vquic.h lib: clarify 'conn->httpversion' 2025-01-24 10:59:02 +01:00
vquic_int.h lib: merge ENABLE_QUIC C macro into USE_HTTP3 2024-04-13 08:33:27 +00:00