p2p: simplify tcpPipe function

This commit is contained in:
Anton Evangelatov 2018-02-22 11:08:11 +01:00
parent b2b9a9aa81
commit 863ad2bea8

View file

@ -604,55 +604,28 @@ func TestHandshakeForwardCompatibility(t *testing.T) {
// tcpPipe creates an in process full duplex pipe based on a localhost TCP socket // tcpPipe creates an in process full duplex pipe based on a localhost TCP socket
func tcpPipe() (net.Conn, net.Conn, error) { func tcpPipe() (net.Conn, net.Conn, error) {
type result struct { l, err := net.Listen("tcp", "127.0.0.1:0")
conn net.Conn
err error
}
cl := make(chan result)
cd := make(chan result)
start := make(chan net.Addr)
go func(res chan result, start chan net.Addr) {
// resolve
addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
if err != nil { if err != nil {
res <- result{err: err} return nil, nil, err
return
} }
// listen defer l.Close()
l, err := net.ListenTCP("tcp", addr)
if err != nil {
res <- result{err: err}
return
}
start <- l.Addr()
c, err := l.AcceptTCP()
if err != nil {
res <- result{err: err}
return
}
res <- result{conn: c}
}(cl, start)
go func(res chan result, start chan net.Addr) { var aconn net.Conn
addr := <-start aerr := make(chan error, 1)
c, err := net.DialTCP("tcp", nil, addr.(*net.TCPAddr)) go func() {
if err != nil { var err error
res <- result{err: err} aconn, err = l.Accept()
return aerr <- err
} }()
res <- result{conn: c}
}(cd, start)
a := <-cl dconn, err := net.Dial("tcp", l.Addr().String())
if a.err != nil { if err != nil {
return nil, nil, a.err <-aerr
return nil, nil, err
} }
b := <-cd if err := <-aerr; err != nil {
if b.err != nil { dconn.Close()
return nil, nil, b.err return nil, nil, err
} }
return a.conn, b.conn, nil return aconn, dconn, nil
} }