code: func (c *PipeConn) Read(b []byte) (int, error) {
  	// Use ReadFile() rather than Read() because the latter
  	// contains a workaround that eats ERROR_BROKEN_PIPE.
  	overlapped, err := newOverlapped()
  	if err != nil {
  		return 0, err
  	}
  	defer syscall.CloseHandle(overlapped.HEvent)
  	var n uint32
  	err = syscall.ReadFile(c.handle, b, &n, overlapped)
  	return c.completeRequest(iodata{n, err}, c.readDeadline, overlapped)
  }
docs: // Read implements the net.Conn Read method.