fasthttputil/inmemory_listener.go
func (ln *InmemoryListener) Dial() (net.Conn, error) {
	pc := NewPipeConns()
	cConn := pc.Conn1()
	sConn := pc.Conn2()
	ln.lock.Lock()
	accepted := make(chan struct{})
	if !ln.closed {
		ln.conns <- acceptConn{sConn, accepted}
		// Wait until the connection has been accepted.
		<-accepted
	} else {
		sConn.Close()
		cConn.Close()
		cConn = nil
	}
	ln.lock.Unlock()

	if cConn == nil {
		return nil, fmt.Errorf("InmemoryListener is already closed")
	}
	return cConn, nil
}
func (ln *InmemoryListener) Dial() (net.Conn, error) {
	pc := NewPipeConns()
	cConn := pc.Conn1()
	sConn := pc.Conn2()
	ln.lock.Lock()
	accepted := make(chan struct{})
	if !ln.closed {
		ln.conns <- acceptConn{sConn, accepted}
		// Wait until the connection has been accepted.
		<-accepted
	} else {
		sConn.Close()
		cConn.Close()
		cConn = nil
	}
	ln.lock.Unlock()

	if cConn == nil {
		return nil, fmt.Errorf("InmemoryListener is already closed")
	}
	return cConn, nil
}
func ( ln * InmemoryListener ) Dial ( ) ( net . Conn , error ) { pc := NewPipeConns ( ) cConn := pc . Conn1 ( ) sConn := pc . Conn2 ( ) ln . lock . Lock ( ) accepted := make ( chan struct { } ) if ! ln . closed { ln . conns <- acceptConn { sConn , accepted } // Wait until the connection has been accepted. <- accepted } else { sConn . Close ( ) cConn . Close ( ) cConn = nil } ln . lock . Unlock ( ) if cConn == nil { return nil , fmt . Errorf ( " " ) } return cConn , nil }
// Dial creates new client<->server connection.
// Just like a real Dial it only returns once the server
// has accepted the connection.
//
// It is safe calling Dial from concurrently running goroutines.
Dial creates new client< - > server connection . Just like a real Dial it only returns once the server has accepted the connection . It is safe calling Dial from concurrently running goroutines .