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.
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 hamzaelsaawy@microsoft.com