Imported Upstream version 4.7.2
[platform/upstream/gcc48.git] / libgo / go / 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 }