The branch stable/15 has been updated by des:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=3b879f771bd462948320373dee7b0e5f281e8e08

commit 3b879f771bd462948320373dee7b0e5f281e8e08
Author:     Dag-Erling Smørgrav <[email protected]>
AuthorDate: 2026-02-21 01:18:15 +0000
Commit:     Dag-Erling Smørgrav <[email protected]>
CommitDate: 2026-02-26 04:02:28 +0000

    libfetch: Fail hard if interrupted while connecting
    
    This fixes an issue where the first address that DNS returns is blocked
    by a packet filter, so we hang for a while, then the user hits Ctrl-C,
    interrupting connect(2), whereupon we move on to the next address, get
    a connection, request the file, and return to fetch(1), which sees that
    SIGINT was caught and bails.
    
    Note that we make no attempt to enforce fetchTimeout in the connection
    phase, and never have.  It's feasible, but non-trivial, so we'll leave
    it as an exercise for future us.
    
    PR:             293312
    MFC after:      1 week
    Reviewed by:    imp
    Differential Revision:  https://reviews.freebsd.org/D55406
    
    (cherry picked from commit afbdcd402bb439bd3d487baaad63b68e95929265)
---
 lib/libfetch/common.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/lib/libfetch/common.c b/lib/libfetch/common.c
index 0bb65b0b8268..9d31b175c0fc 100644
--- a/lib/libfetch/common.c
+++ b/lib/libfetch/common.c
@@ -651,7 +651,13 @@ fetch_connect(const char *host, int port, int af, int 
verbose)
                        goto syserr;
                }
                /* attempt to connect to server address */
-               if ((err = connect(sd, sai->ai_addr, sai->ai_addrlen)) == 0)
+               while ((err = connect(sd, sai->ai_addr, sai->ai_addrlen)) < 0) {
+                       if (errno == EINTR && fetchRestartCalls)
+                               continue;
+                       break;
+               }
+               /* success? */
+               if (err == 0)
                        break;
                /* clean up before next attempt */
                close(sd);

Reply via email to