// handle multiplex-ed connection func handleMux(conn io.ReadWriteCloser, target string) { // stream multiplex var mux *yamux.Session config := &yamux.Config{ AcceptBacklog: 256, EnableKeepAlive: true, KeepAliveInterval: 30 * time.Second, ConnectionWriteTimeout: 30 * time.Second, MaxStreamWindowSize: 16777216, LogOutput: os.Stderr, } m, err := yamux.Server(conn, config) if err != nil { log.Println(err) return } mux = m defer mux.Close() for { p1, err := mux.Accept() if err != nil { log.Println(err) return } p2, err := net.DialTimeout("tcp", target, 5*time.Second) if err != nil { log.Println(err) return } go handleClient(p1, p2) } }