func (c *tunnelRemoton) srvTunnel(session *remoton.SessionClient) error { port, _ := common.FindFreePortTCP(55123) addrSrv := "localhost:" + port log.Println("listen at " + addrSrv) listener, err := net.Listen("tcp", addrSrv) if err != nil { return err } c.listener = listener go func(listener net.Listener) { for { conn, err := listener.Accept() if err != nil { listener.Close() log.Error(err) break } remote, err := session.DialTCP("nx") if err != nil { log.Error(err) listener.Close() break } log.Println("new connection") go c.handle(conn, remote) } }(listener) log.Println("Xpra " + c.xpraSrv.Version() + " attaching to " + addrSrv) err = c.xpraSrv.Attach(addrSrv) if err != nil { listener.Close() return err } return nil }