refactor: generalize IPC ParseAddress to use sockaddr_storage #34845

pull enirox001 wants to merge 1 commits into bitcoin:master from enirox001:03-26-tcp-refac changing 1 files +47 −27
  1. enirox001 commented at 7:43 PM on March 17, 2026: contributor

    This is a pure structural refactor with zero behavior change.

    Motivation

    Currently, ParseAddress and the underlying connect/bind functions in src/ipc/process.cpp are hardwired to use struct sockaddr_un. This tightly couples the IPC implementation to Unix domain sockets and makes it difficult to introduce other socket types.

    This PR abstracts the address parsing to use the protocol-agnostic sockaddr_storage and socklen_t.

    • The existing Unix socket logic is extracted into a ParseUnixAddress helper.
    • The main ParseAddress function is turned into a clean dispatcher.
    • connect and bind are updated to use the generic ss_family and dynamic address lengths.

    This structural change paves the way for introducing authenticated TCP socket support to multiprocess IPC (addressing #32802). By separating this refactor from the TCP implementation, it keeps the diff footprint small and makes the follow-on feature PR much easier to review.

    (Note: The follow-on TCP work will rely on reusing the existing RPC cookie auth and explicit SSH tunneling for untrusted networks, mirroring our existing RPC threat model without introducing new dependencies).

    <!-- *** Please remove the following help text before submitting: *** Pull requests without a rationale and clear improvement may be closed immediately. GUI-related pull requests should be opened against https://github.com/bitcoin-core/gui first. See CONTRIBUTING.md -->

    <!-- Please provide clear motivation for your patch and explain how it improves Bitcoin Core user experience or Bitcoin Core developer experience significantly: * Any test improvements or new tests that improve coverage are always welcome. * All other changes should have accompanying unit tests (see `src/test/`) or functional tests (see `test/`). Contributors should note which tests cover modified code. If no tests exist for a region of modified code, new tests should accompany the change. * Bug fixes are most welcome when they come with steps to reproduce or an explanation of the potential issue as well as reasoning for the way the bug was fixed. * Features are welcome, but might be rejected due to design or scope issues. If a feature is based on a lot of dependencies, contributors should first consider building the system outside of Bitcoin Core, if possible. * Refactoring changes are only accepted if they are required for a feature or bug fix or otherwise improve developer experience significantly. For example, most "code style" refactoring changes require a thorough explanation why they are useful, what downsides they have and why they *significantly* improve developer experience or avoid serious programming bugs. Note that code style is often a subjective matter. Unless they are explicitly mentioned to be preferred in the [developer notes](/doc/developer-notes.md), stylistic code changes are usually rejected. -->

    <!-- Bitcoin Core has a thorough review process and even the most trivial change needs to pass a lot of eyes and requires non-zero or even substantial time effort to review. There is a huge lack of active reviewers on the project, so patches often sit for a long time. -->

  2. ipc: Refactor ParseAddress to use sockaddr_storage
    Currently, ParseAddress and the underlying connect/bind functions in
    `src/ipc/process.cpp` are hardwired to use `struct sockaddr_un`. This
    tightly couples the IPC implementation to Unix domain sockets.
    
    This commit abstracts the address parsing to use the protocol-agnostic
    `sockaddr_storage` and `socklen_t`. The existing Unix socket logic is
    extracted into a `ParseUnixAddress` helper, turning the main `ParseAddress`
    function into a clean dispatcher.
    
    This is a pure structural refactor with zero behavior change. It paves
    the way for introducing authenticated TCP socket support to multiprocess
    IPC.
    f970092230
  3. DrahtBot added the label Refactoring on Mar 17, 2026
  4. DrahtBot commented at 7:43 PM on March 17, 2026: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline for information on the review process. A summary of reviews will appear here.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

    LLM Linter (✨ experimental)

    Possible places where named args for integral literals may be used (e.g. func(x, /*named_arg=*/0) in C++, and func(x, named_arg=0) in Python):

    • ::socket(addr.ss_family, SOCK_STREAM, 0) in src/ipc/process.cpp
    • ::socket(addr.ss_family, SOCK_STREAM, 0) in src/ipc/process.cpp
    • strncpy(addr.sun_path, path_str.c_str(), sizeof(addr.sun_path)-1) in src/ipc/process.cpp

    <sup>2026-03-17 19:43:56</sup>

  5. enirox001 closed this on Mar 17, 2026

  6. enirox001 deleted the branch on Mar 18, 2026

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-02 12:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me