Open Yraid opened 5 months ago
I've reproduced this behaviour (go-winio v0.5.2
built with go 1.20.10
) and applied the fix and it resolved my issue. It was working on go-winio v0.4.12
.
Though I'm not an expert on this area so I cannot comment on the fix itself.
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 themakeServerPipeHandle
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