在dial中在localAddr指明时,区分v4和v6

This commit is contained in:
e1732a364fed
2000-01-01 00:00:00 +00:00
parent 7b79887d50
commit ed7fbcbb50
2 changed files with 24 additions and 1 deletions

View File

@@ -68,7 +68,7 @@ sudo cp examples/vlesss.server.toml server.toml
如果你不愿意使用linux的“后台服务”只是想手动去令它在后台运行那么实际上在verysimple所在位置运行如下一段命令即可。
```
nohup ./verysimple_linux_amd64 -c server.toml >/dev/null &
nohup ./verysimple -c server.toml >/dev/null &
```
这里将它的标准输出舍弃了因为一般来说我们会在toml配置文件中 配置好日志文件名称;如果不舍弃输出的话,就会多一个输出(到控制台),增加系统负担。

View File

@@ -147,6 +147,29 @@ func (a Addr) DialWithOpt(sockopt *Sockopt, localAddr net.Addr) (net.Conn, error
}
if localAddr != nil {
dialer.LocalAddr = localAddr
//localAddr一般用于指定ipv4或者ipv6出站所以我们这里标注一下。
switch a.Network {
case "tcp":
if ta, ok := localAddr.(*net.TCPAddr); ok {
//ipv6
if ta.IP.To4() == nil {
a.Network = "tcp6"
} else {
a.Network = "tcp4"
}
}
case "udp":
if ta, ok := localAddr.(*net.UDPAddr); ok {
if ta.IP.To4() == nil {
a.Network = "udp6"
} else {
a.Network = "udp4"
}
}
}
}
if sockopt != nil {
dialer.Control = func(network, address string, c syscall.RawConn) error {