github.com/slayercat/go@v0.0.0-20170428012452-c51559813f61/src/net/pipe.go (about)

     1  // Copyright 2010 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package net
     6  
     7  import (
     8  	"errors"
     9  	"io"
    10  	"time"
    11  )
    12  
    13  // Pipe creates a synchronous, in-memory, full duplex
    14  // network connection; both ends implement the Conn interface.
    15  // Reads on one end are matched with writes on the other,
    16  // copying data directly between the two; there is no internal
    17  // buffering.
    18  func Pipe() (Conn, Conn) {
    19  	r1, w1 := io.Pipe()
    20  	r2, w2 := io.Pipe()
    21  
    22  	return &pipe{r1, w2}, &pipe{r2, w1}
    23  }
    24  
    25  type pipe struct {
    26  	*io.PipeReader
    27  	*io.PipeWriter
    28  }
    29  
    30  type pipeAddr int
    31  
    32  func (pipeAddr) Network() string {
    33  	return "pipe"
    34  }
    35  
    36  func (pipeAddr) String() string {
    37  	return "pipe"
    38  }
    39  
    40  func (p *pipe) Close() error {
    41  	err := p.PipeReader.Close()
    42  	err1 := p.PipeWriter.Close()
    43  	if err == nil {
    44  		err = err1
    45  	}
    46  	return err
    47  }
    48  
    49  func (p *pipe) LocalAddr() Addr {
    50  	return pipeAddr(0)
    51  }
    52  
    53  func (p *pipe) RemoteAddr() Addr {
    54  	return pipeAddr(0)
    55  }
    56  
    57  func (p *pipe) SetDeadline(t time.Time) error {
    58  	return &OpError{Op: "set", Net: "pipe", Source: nil, Addr: nil, Err: errors.New("deadline not supported")}
    59  }
    60  
    61  func (p *pipe) SetReadDeadline(t time.Time) error {
    62  	return &OpError{Op: "set", Net: "pipe", Source: nil, Addr: nil, Err: errors.New("deadline not supported")}
    63  }
    64  
    65  func (p *pipe) SetWriteDeadline(t time.Time) error {
    66  	return &OpError{Op: "set", Net: "pipe", Source: nil, Addr: nil, Err: errors.New("deadline not supported")}
    67  }