package main import ( "flag" "log" "os" "os/signal" "syscall" "github.com/SNI_Proxy/config" "github.com/SNI_Proxy/proxy" ) func main() { // 解析命令行参数 configPath := flag.String("config", "config.yaml", "配置文件路径") flag.Parse() // 加载配置 cfg, err := config.LoadConfig(*configPath) if err != nil { log.Fatalf("加载配置失败: %v", err) } // 创建并启动代理服务器 server := proxy.NewServer(cfg) if err := server.Start(); err != nil { log.Fatalf("启动代理服务器失败: %v", err) } log.Printf("SNI代理服务器已启动,监听地址: %s", cfg.Listen) // 等待中断信号以优雅地关闭服务器 waitForInterrupt(server) } // 等待中断信号 func waitForInterrupt(server *proxy.Server) { sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) <-sigChan log.Println("正在关闭服务器...") server.Stop() log.Println("服务器已关闭") }