• Tom Lane's avatar
    Recognize network-failure errnos as indicating hard connection loss. · fe27009c
    Tom Lane authored
    Up to now, only ECONNRESET (and EPIPE, in most but not quite all places)
    received special treatment in our error handling logic.  This patch
    changes things so that related error codes such as ECONNABORTED are
    also recognized as indicating that the connection's dead and unlikely
    to come back.
    
    We continue to think, however, that only ECONNRESET and EPIPE should be
    reported as probable server crashes; the other cases indicate network
    connectivity problems but prove little about the server's state.  Thus,
    there's no change in the error message texts that are output for such
    cases.  The key practical effect is that errcode_for_socket_access()
    will report ERRCODE_CONNECTION_FAILURE rather than
    ERRCODE_INTERNAL_ERROR for a network failure.  It's expected that this
    will fix buildfarm member lorikeet's failures since commit 32a9c0bd,
    as that seems to be due to not treating ECONNABORTED equivalently to
    ECONNRESET.
    
    The set of errnos treated this way now includes ECONNABORTED, EHOSTDOWN,
    EHOSTUNREACH, ENETDOWN, ENETRESET, and ENETUNREACH.  Several of these
    were second-class citizens in terms of their handling in places like
    get_errno_symbol(), so upgrade the infrastructure where necessary.
    
    As committed, this patch assumes that all these symbols are defined
    everywhere.  POSIX specifies all of them except EHOSTDOWN, but that
    seems to exist on all platforms of interest; we'll see what the
    buildfarm says about that.
    
    Probably this should be back-patched, but let's see what the buildfarm
    thinks of it first.
    
    Fujii Masao and Tom Lane
    
    Discussion: https://postgr.es/m/2621622.1602184554@sss.pgh.pa.us
    fe27009c
strerror.c 6.85 KB