package proxy import ( "net" "time" "github.com/xjasonlyu/clash/component/resolver" ) const ( tcpConnectTimeout = 5 * time.Second tcpKeepAlivePeriod = 30 * time.Second ) func tcpKeepAlive(c net.Conn) { if tcp, ok := c.(*net.TCPConn); ok { tcp.SetKeepAlive(true) tcp.SetKeepAlivePeriod(tcpKeepAlivePeriod) } } func resolveUDPAddr(network, address string) (*net.UDPAddr, error) { host, port, err := net.SplitHostPort(address) if err != nil { return nil, err } ip, err := resolver.ResolveIP(host) if err != nil { return nil, err } return net.ResolveUDPAddr(network, net.JoinHostPort(ip.String(), port)) }