Пример #1
0
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
}