mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-10-10 11:10:20 +08:00
44 lines
988 B
Go
44 lines
988 B
Go
package netLayer
|
|
|
|
import (
|
|
"syscall"
|
|
)
|
|
|
|
func SetTproxy(fd int) error {
|
|
return syscall.SetsockoptInt(fd, syscall.SOL_IP, syscall.IP_TRANSPARENT, 1)
|
|
}
|
|
|
|
func SetSomark(fd int, somark int) error {
|
|
return syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_MARK, somark)
|
|
}
|
|
|
|
func SetTproxyFor(tcplistener ListenerWithFile) error {
|
|
fileDescriptorSource, err := tcplistener.File()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer fileDescriptorSource.Close()
|
|
|
|
return SetTproxy(int(fileDescriptorSource.Fd()))
|
|
}
|
|
|
|
func SetSomarkForListener(tcplistener ListenerWithFile, somark int) error {
|
|
fileDescriptorSource, err := tcplistener.File()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer fileDescriptorSource.Close()
|
|
|
|
return SetSomark(int(fileDescriptorSource.Fd()), somark)
|
|
}
|
|
|
|
func SetSomarkForConn(c ConnWithFile, somark int) error {
|
|
fileDescriptorSource, err := c.File()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer fileDescriptorSource.Close()
|
|
|
|
return SetSomark(int(fileDescriptorSource.Fd()), somark)
|
|
}
|