code: 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
  }
docs: // 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.