Update socks proxy properly handle closing of half-closed connections
During testing of SocketAce I have encountered an issue that does not appear to happen when using standard net.Conn. Namely: when using io.Pipe instead of a standard network connection, the socks proxy would block indefinitely after the server connection is closed.
This is due to a fact that handleContext waits for both connections -- pipe from server to client and client to server -- to finish successfully.As these are represented by two different pipes, one would close but the other one would never finish.
This patch will wait for at least one of the pipes to finish and continue as soon as it does. The implementation will wait a bit just to make sure there are no errors in the second pipe but will continue soon after. All tests in the code seem to work. The new use case is covered by the new code in close_test.go.
To the best of my knowledge, this change should not affect any existing functionality.