src/pkg/net/pipe.go - The Go Programming Language

Golang

Source file src/pkg/net/pipe.go

     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 errors.New("net.Pipe does not support deadlines")
    59	}
    60	
    61	func (p *pipe) SetReadDeadline(t time.Time) error {
    62		return errors.New("net.Pipe does not support deadlines")
    63	}
    64	
    65	func (p *pipe) SetWriteDeadline(t time.Time) error {
    66		return errors.New("net.Pipe does not support deadlines")
    67	}