HvsockConn shutdown bugfix, added .IsClosed() functions #231
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.
The PR fixes bugs with
HvsockConn
CloseRead
/Write
where shutdown is attempted on closed sockets, which returns a cryptic error:close hvsock [...]: shutdown: An operation was attempted on something that is not a socket
, and where the(*HvsockConn).shutdown
function was not respecting whether to close a socket for reading or writing, and only shutting down the pipe for reading.Currently,
(*Process).CloseStdin
runs into two issues:syscall.Shutdown
on a null socket handle. This PR preemptively returnsErrFileClosed
to prevent that, and allow upstream callers to check for the situation where the socket is already closed.(*HvsockConn).CloseWrite
does not actually close the connection for writing, since(*HvsockConn).shutdown
ignores its parameter and closes the socket only for reading. This prevents hcsshim from usingCloseWrite
(from within(*Process).CloseStdin
) to stop the copy operation from upstream pipes into the processesstd in
.This PR fixes those issues.
Additionally, two functions have been added:
(*HvsockConn).CloseReadWrite
to expose shutting down both ends of the socket.(*win32File).IsClosed
(and thereforewin32Pipe
andwin32MessageBytePipe
) and(*HvsockConn).IsClosed
and to check if the socket/pipe has already been closed, since the structs already track internally if they have been closed or not.Signed-off-by: Hamza El-Saawy [email protected]