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 if err != nil {
err error return nil, nil, err
} }
defer l.Close()
cl := make(chan result) var aconn net.Conn
cd := make(chan result) aerr := make(chan error, 1)
go func() {
var err error
aconn, err = l.Accept()
aerr <- err
}()
start := make(chan net.Addr) dconn, err := net.Dial("tcp", l.Addr().String())
if err != nil {
go func(res chan result, start chan net.Addr) { <-aerr
// resolve return nil, nil, err
addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
if err != nil {
res <- result{err: err}
return
}
// listen
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) {
addr := <-start
c, err := net.DialTCP("tcp", nil, addr.(*net.TCPAddr))
if err != nil {
res <- result{err: err}
return
}
res <- result{conn: c}
}(cd, start)
a := <-cl
if a.err != nil {
return nil, nil, a.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
} }