-
Notifications
You must be signed in to change notification settings - Fork 182
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
pipe.Accept() hangs on Windows 2008 R2 and Windows 7 #313
Comments
I've reproduced this behaviour ( Though I'm not an expert on this area so I cannot comment on the fix itself. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How do we replicate the issue?
go-winio v0.6.1
and Go program built with1.20.13
Finding
I used
dlv
to look around and it turned out thatconnectNamedPipe
can't getERROR_IO_CONNECTED
on older platforms. It gotERROR_IO_PENDING
. Thus the followingasyncIO
call is pending forever (so doesconnectPipe
andAccept
). On the other hand, newer platforms can getERROR_IO_CONNECTED
.I'm not sure if the
connectNamedPipe
call is implemented differently on platforms like Windows 2008 R2 and Windows 10.I refer to changes: #125 and #80 and I can fix this issue by adding the following code snippets in ListenPipe after the
makeServerPipeHandle
call:The reason for ignoring
windows.ERROR_PIPE_BUSY
is that we got this error when a real client is connecting before the dummy client, but we don't care about this error as the dummy client will be closed soon. The idea is to callfs.CreateFile
to keep the pipe server "awake".Questions
The text was updated successfully, but these errors were encountered: