Update socks proxy properly handle closing of half-closed connections #38
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
During testing of SocketAce I have encountered an issue that does not appear to happen when using standard
net.Conn
. Namely: when usingio.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.