code: func parseHostContainerAddrs() (host net.Addr, container net.Addr) {
  	var (
  		proto         = flag.String("proto", "tcp", "proxy protocol")
  		hostIP        = flag.String("host-ip", "", "host ip")
  		hostPort      = flag.Int("host-port", -1, "host port")
  		containerIP   = flag.String("container-ip", "", "container ip")
  		containerPort = flag.Int("container-port", -1, "container port")
  	)
  
  	flag.Parse()
  
  	switch *proto {
  	case "tcp":
  		host = &net.TCPAddr{IP: net.ParseIP(*hostIP), Port: *hostPort}
  		container = &net.TCPAddr{IP: net.ParseIP(*containerIP), Port: *containerPort}
  	case "udp":
  		host = &net.UDPAddr{IP: net.ParseIP(*hostIP), Port: *hostPort}
  		container = &net.UDPAddr{IP: net.ParseIP(*containerIP), Port: *containerPort}
  	case "sctp":
  		host = &sctp.SCTPAddr{IP: []net.IP{net.ParseIP(*hostIP)}, Port: *hostPort}
  		container = &sctp.SCTPAddr{IP: []net.IP{net.ParseIP(*containerIP)}, Port: *containerPort}
  	default:
  		log.Fatalf("unsupported protocol %s", *proto)
  	}
  
  	return host, container
  }
docs: // parseHostContainerAddrs parses the flags passed on reexec to create the TCP/UDP/SCTP
  // net.Addrs to map the host and container ports