blob: f1a2eca4e8847b4321af226e7c43a493d0cdeb81 [file] [log] [blame]
Mikio Hara471e43c2011-11-16 06:59:08 +09001// 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
Russ Cox1d18e892010-04-26 10:36:05 -07005package net
6
7import (
Russ Coxeb692922011-11-01 22:05:34 -04008 "errors"
Russ Cox1d18e892010-04-26 10:36:05 -07009 "io"
Brad Fitzpatrickb71883e2012-01-18 16:24:06 -080010 "time"
Russ Cox1d18e892010-04-26 10:36:05 -070011)
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.
18func Pipe() (Conn, Conn) {
19 r1, w1 := io.Pipe()
20 r2, w2 := io.Pipe()
21
22 return &pipe{r1, w2}, &pipe{r2, w1}
23}
24
25type pipe struct {
26 *io.PipeReader
27 *io.PipeWriter
28}
29
30type pipeAddr int
31
32func (pipeAddr) Network() string {
33 return "pipe"
34}
35
36func (pipeAddr) String() string {
37 return "pipe"
38}
39
Russ Coxeb692922011-11-01 22:05:34 -040040func (p *pipe) Close() error {
Russ Cox1d18e892010-04-26 10:36:05 -070041 err := p.PipeReader.Close()
42 err1 := p.PipeWriter.Close()
43 if err == nil {
44 err = err1
45 }
46 return err
47}
48
49func (p *pipe) LocalAddr() Addr {
50 return pipeAddr(0)
51}
52
53func (p *pipe) RemoteAddr() Addr {
54 return pipeAddr(0)
55}
56
Brad Fitzpatrickb71883e2012-01-18 16:24:06 -080057func (p *pipe) SetDeadline(t time.Time) error {
58 return errors.New("net.Pipe does not support deadlines")
Russ Cox1d18e892010-04-26 10:36:05 -070059}
60
Brad Fitzpatrickb71883e2012-01-18 16:24:06 -080061func (p *pipe) SetReadDeadline(t time.Time) error {
62 return errors.New("net.Pipe does not support deadlines")
Russ Cox1d18e892010-04-26 10:36:05 -070063}
64
Brad Fitzpatrickb71883e2012-01-18 16:24:06 -080065func (p *pipe) SetWriteDeadline(t time.Time) error {
66 return errors.New("net.Pipe does not support deadlines")
Russ Cox1d18e892010-04-26 10:36:05 -070067}