Files
bitcoin/depends/patches
merge-script 494300f4cc Merge bitcoin/bitcoin#35796: depends: fix IPC listeners on macOS dying when accepting a dead socket
e07224f2d5 depends: fix IPC listeners on macOS dying when accepting a dead socket (xyzconstant)

Pull request description:

  This PR adds a depends patch to fix a Cap'n Proto bug present in macOS that throws the following exception after accepting a disconnected client:

  ```
  mp/proxy.cpp:48: error: Uncaught exception in daemonized task.; exception = kj/async-io-unix.c++:1365: failed: setsocketopt(IPPROTO_TCP, TCP_NODELAY): Invalid argument
  ```

  This goes uncaught killing `libmultiprocess`'s accept loop (`mp::ListenConnections()`) in the process.

  ### Root cause

  After `accept()`, kj unconditionally calls `setsockopt(TCP_NODELAY)` on the connection socket. For Unix sockets, kj handles the usual "not supported" error codes, however, on macOS EINVAL is returned when the client has already disconnected and kj only tolerates that code when built for FreeBSD. The unexpected error then goes uncaught in the accept loop, causing the listener to stop accepting new connections.

  See https://github.com/bitcoin-core/libmultiprocess/issues/319 for more details and instructions on how to reproduce it in Bitcoin Core using socat.

  ### Fix

  The patch is based on the EINVAL handling from capnproto/capnproto@7df5bd078, which is only available on the not yet released v2 branch. It's applied to `capnp.mk` as a temporary workaround until capnproto/capnproto#2748 is available in a v1 release.

ACKs for top commit:
  hebasto:
    ACK e07224f2d5, I have reviewed the code and it looks OK.
  ryanofsky:
    Code review ACK e07224f2d5. Confirmed patch matches what was committed upstream (85d8e47fcb).

Tree-SHA512: 7d3b3dd6cabdc658971e0f20159ad36594759b3686d2e5dc74fb21900ccec0c637980e36fa71fbd808c642ce83f89c73f5bc788eb42644bceed67acb78e8eee5
2026-09-09 09:42:18 +01:00
..
2025-11-20 10:15:46 +00:00