Skip to content
  • Nick Mathewson's avatar
    Correctly handle fd-drain errors on windows workqueues · 44514058
    Nick Mathewson authored
    Windows doesn't let you check the socket error for a socket with
    WSAGetLastError() and getsockopt(SO_ERROR).  But
    getsockopt(SO_ERROR) clears the error on the socket, so you can't
    call it more than once per error.
    
    When we introduced recv_ni to help drain alert sockets, back in
    0.2.6.3-alpha, we had the failure path for recv_ni call getsockopt()
    twice, though: once to check for EINTR and one to check for EAGAIN.
    Of course, we never got the eagain, so we treated it as an error,
    and warned about: "No error".
    
    The fix here is to have these functions return -errno on failure.
    
    Fixes bug 21540; bugfix on 0.2.6.3-alpha.
    44514058