Skip to content

Instantly share code, notes, and snippets.

@tsavola
Created April 1, 2016 00:38
Show Gist options
  • Save tsavola/cd847385989f1ae497dbbcd2bba68753 to your computer and use it in GitHub Desktop.
Save tsavola/cd847385989f1ae497dbbcd2bba68753 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