I found another minor issue in socket-win32.cxx in the read(...) function. If the socket closes while in the middle of the read function the ::recv(...) function returns 0 which may cause this loop to lockup. Rather, if ::recv(...) returns 0 the loop should terminate. See attached diff.
That looks reasonable.
Committed. I will push it later today.