mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-18 18:02:24 +00:00
p2p: simplify tcpPipe function
This commit is contained in:
parent
b2b9a9aa81
commit
863ad2bea8
1 changed files with 19 additions and 46 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue