4to6/main.go
2025-02-07 10:32:47 +08:00

48 lines
1.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"context"
"flag"
"fmt"
"os"
)
// 主循环,为每个端口映射启动一个代理
func Loop(config Config) {
ctx, cancel := context.WithCancel(context.Background())
// 启动 TCP 代理
for tcp_listenAddr, tcp_targetAddr := range config.Global.LT {
tcp_wg.Add(1)
go StartTcpProxy(tcp_listenAddr, tcp_targetAddr)
}
// 启动 UDP 代理
for udp_listenAddr, udp_targetAddr := range config.Global.LU {
udp_wg.Add(1)
go StartUdpProxy(ctx, udp_listenAddr, udp_targetAddr)
}
// 监听退出信号,触发 `cancel()` 让所有 Goroutine 退出
WaitForExit(cancel)
}
func main() {
daemon := flag.Bool("d", false, "守护进程模式") // 解析命令行参数,是否以守护进程模式运行
config := flag.String("c", "4to6.conf", "指定配置文件") // 解析命令行参数,是否以守护进程模式运行
flag.Parse()
if *daemon {
Daemon() // 如果设置了-d参数则进入守护进程模式
}
LT, err := parseConfig(*config)
if err != nil {
fmt.Fprintf(os.Stderr, "读取配置错误: %v\n", err)
os.Exit(1)
}
Loop(LT) // 启动所有代理服务
}