• Tom Lane's avatar
    Expect EWOULDBLOCK from a non-blocking connect() call only on Windows. · a099482c
    Tom Lane authored
    On Unix-ish platforms, EWOULDBLOCK may be the same as EAGAIN, which is
    *not* a success return, at least not on Linux.  We need to treat it as a
    failure to avoid giving a misleading error message.  Per the Single Unix
    Spec, only EINPROGRESS and EINTR returns indicate that the connection
    attempt is in progress.
    
    On Windows, on the other hand, EWOULDBLOCK (WSAEWOULDBLOCK) is the expected
    case.  We must accept EINPROGRESS as well because Cygwin will return that,
    and it doesn't seem worth distinguishing Cygwin from native Windows here.
    It's not very clear whether EINTR can occur on Windows, but let's leave
    that part of the logic alone in the absence of concrete trouble reports.
    
    Also, remove the test for errno == 0, effectively reverting commit
    da9501bd, which AFAICS was just a thinko;
    or at best it might have been a workaround for a platform-specific bug,
    which we can hope is gone now thirteen years later.  In any case, since
    libpq makes no effort to reset errno to zero before calling connect(),
    it seems unlikely that that test has ever reliably done anything useful.
    
    Andres Freund and Tom Lane
    a099482c
fe-connect.c 138 KB