recv_ni() and friends don't ask about errno the Windows way?

We have a report from a Windows relay operator about many failures in drain_fd(): https://lists.torproject.org/pipermail/tor-relays/2015-August/007557.html

A) Looking through src/common/compat_threads.c I see that sock_drain() (which is what drain_fd uses if we decided socketpair was the best way to make a pipe) calls recv_ni() which flat-out just looks at errno, with none of the usual Windows wrapping to get at the errno. Is this a bug?

B) Can we please have some more comments in compat_threads.c? What is sock_drain for? Why does replyqueue_process() appear to read and then discard everything the worker has to say?

Thanks!

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information