From 96bc308c29d5bd10beab2a69ca7b66bd74d7719d Mon Sep 17 00:00:00 2001 From: spiritlhl <103393591+spiritLHLS@users.noreply.github.com> Date: Wed, 1 May 2024 09:50:53 +0000 Subject: [PATCH] update --- .github/workflows/main.yaml | 2 -- backtrace/listen_darwin.go | 26 ++++++++++++++++++++++++++ backtrace/listen_freebsd.go | 26 ++++++++++++++++++++++++++ backtrace/listen_openbsd.go | 26 ++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 backtrace/listen_darwin.go create mode 100644 backtrace/listen_freebsd.go create mode 100644 backtrace/listen_openbsd.go diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index a3be263..a8ff58c 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -87,8 +87,6 @@ jobs: - goos: linux goarch: arm goarm: 5 - - goos: android - goarch: arm64 - goos: windows goarch: arm64 - goos: windows diff --git a/backtrace/listen_darwin.go b/backtrace/listen_darwin.go new file mode 100644 index 0000000..1d27211 --- /dev/null +++ b/backtrace/listen_darwin.go @@ -0,0 +1,26 @@ +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 +} diff --git a/backtrace/listen_freebsd.go b/backtrace/listen_freebsd.go new file mode 100644 index 0000000..1d27211 --- /dev/null +++ b/backtrace/listen_freebsd.go @@ -0,0 +1,26 @@ +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 +} diff --git a/backtrace/listen_openbsd.go b/backtrace/listen_openbsd.go new file mode 100644 index 0000000..1d27211 --- /dev/null +++ b/backtrace/listen_openbsd.go @@ -0,0 +1,26 @@ +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 +}