Skip to content

Instantly share code, notes, and snippets.

@Happy-Ferret
Forked from tsavola/connpair.go
Created March 19, 2017 11:28
Show Gist options
  • Save Happy-Ferret/a8ab306da03fc7fb5d24d8eb6bac679c to your computer and use it in GitHub Desktop.
Save Happy-Ferret/a8ab306da03fc7fb5d24d8eb6bac679c to your computer and use it in GitHub Desktop.
Like socketpair, but for Golang, and TCP instead of Unix sockets
package connpair
import (
"net"
)
func ConnPair() (serverConn, clientConn net.Conn, err error) {
l, err := net.Listen("tcp", "localhost:0")
if err != nil {
return
}
defer l.Close()
addr := l.Addr()
var err2 error
done := make(chan struct{})
go func() {
defer close(done)
clientConn, err2 = net.Dial(addr.Network(), addr.String())
}()
serverConn, err = l.Accept()
<-done
if err == nil {
err = err2
}
if err != nil {
if clientConn != nil {
clientConn.Close()
}
if serverConn != nil {
serverConn.Close()
}
}
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment