2013-02-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
[official-gcc.git] / libgo / go / net / pipe.go
blobf1a2eca4e8847b4321af226e7c43a493d0cdeb81
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.
5 package net
7 import (
8 "errors"
9 "io"
10 "time"
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()
22 return &pipe{r1, w2}, &pipe{r2, w1}
25 type pipe struct {
26 *io.PipeReader
27 *io.PipeWriter
30 type pipeAddr int
32 func (pipeAddr) Network() string {
33 return "pipe"
36 func (pipeAddr) String() string {
37 return "pipe"
40 func (p *pipe) Close() error {
41 err := p.PipeReader.Close()
42 err1 := p.PipeWriter.Close()
43 if err == nil {
44 err = err1
46 return err
49 func (p *pipe) LocalAddr() Addr {
50 return pipeAddr(0)
53 func (p *pipe) RemoteAddr() Addr {
54 return pipeAddr(0)
57 func (p *pipe) SetDeadline(t time.Time) error {
58 return errors.New("net.Pipe does not support deadlines")
61 func (p *pipe) SetReadDeadline(t time.Time) error {
62 return errors.New("net.Pipe does not support deadlines")
65 func (p *pipe) SetWriteDeadline(t time.Time) error {
66 return errors.New("net.Pipe does not support deadlines")