mirror of
https://github.com/oneclickvirt/backtrace.git
synced 2025-02-23 01:15:40 +08:00
57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
//go:build windows
|
|
// +build windows
|
|
|
|
package backtrace
|
|
|
|
import (
|
|
"net"
|
|
|
|
. "github.com/oneclickvirt/defaultset"
|
|
"golang.org/x/sys/windows"
|
|
)
|
|
|
|
func (t *Tracer) listen(network string, laddr *net.IPAddr) (*net.IPConn, error) {
|
|
if EnableLoger {
|
|
InitLogger()
|
|
defer Logger.Sync()
|
|
conn, err := net.ListenIP(network, laddr)
|
|
if err != nil {
|
|
Logger.Info(err.Error())
|
|
return nil, err
|
|
}
|
|
raw, err := conn.SyscallConn()
|
|
if err != nil {
|
|
Logger.Info(err.Error())
|
|
conn.Close()
|
|
return nil, err
|
|
}
|
|
_ = raw.Control(func(fd uintptr) {
|
|
err = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IP, windows.IP_HDRINCL, 1)
|
|
})
|
|
if err != nil {
|
|
Logger.Info(err.Error())
|
|
conn.Close()
|
|
return nil, err
|
|
}
|
|
return conn, nil
|
|
} else {
|
|
conn, err := net.ListenIP(network, laddr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
raw, err := conn.SyscallConn()
|
|
if err != nil {
|
|
conn.Close()
|
|
return nil, err
|
|
}
|
|
_ = raw.Control(func(fd uintptr) {
|
|
err = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IP, windows.IP_HDRINCL, 1)
|
|
})
|
|
if err != nil {
|
|
conn.Close()
|
|
return nil, err
|
|
}
|
|
return conn, nil
|
|
}
|
|
}
|