mirror of
https://github.com/oneclickvirt/backtrace.git
synced 2025-02-23 17:35:39 +08:00
27 lines
492 B
Go
27 lines
492 B
Go
package backtrace
|
|
|
|
import (
|
|
"net"
|
|
"syscall"
|
|
)
|
|
|
|
func (t *Tracer) listen(network string, laddr *net.IPAddr) (*net.IPConn, error) {
|
|
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 = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1)
|
|
})
|
|
if err != nil {
|
|
conn.Close()
|
|
return nil, err
|
|
}
|
|
return conn, nil
|
|
}
|