John Starks bd71ef0e5d pipe: Fix ListenPipe/DialPipe race
ListenPipe can fail if there is a concurrent DialPipe because there is a
race window where DialPipe can connect to the initial server named pipe
before it is connected to and closed by ListenPipe.

To fix this, use the lower-level NT API for creating the server pipe,
since this API allows for specifying that a server pipe should initially
be in the disconnected state instead of the listening state. This allows
us to avoid the race condition by creating the pipe in the correct state
initially, so there is no longer a need to create a dummy client
connection.
2019-04-08 10:08:23 -07:00
2018-08-03 12:01:41 -07:00
2018-08-23 15:01:31 -07:00
2016-04-06 13:59:58 -07:00
2017-08-01 17:24:15 -07:00
2018-08-23 14:56:23 -07:00
2018-08-03 12:01:41 -07:00
2016-01-30 18:11:47 -08:00
2019-04-08 10:08:23 -07:00
2016-06-21 14:08:28 -07:00

go-winio

This repository contains utilities for efficiently performing Win32 IO operations in Go. Currently, this is focused on accessing named pipes and other file handles, and for using named pipes as a net transport.

This code relies on IO completion ports to avoid blocking IO on system threads, allowing Go to reuse the thread to schedule another goroutine. This limits support to Windows Vista and newer operating systems. This is similar to the implementation of network sockets in Go's net package.

Please see the LICENSE file for licensing information.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Thanks to natefinch for the inspiration for this library. See https://github.com/natefinch/npipe for another named pipe implementation.

S
Description
Win32 IO-related utilities for Go
Readme MIT
835 KiB
Languages
Go 100%