diff --git a/pkg/mdns/syscall_darwin.go b/pkg/mdns/syscall_darwin.go new file mode 100644 index 00000000..c1f1225b --- /dev/null +++ b/pkg/mdns/syscall_darwin.go @@ -0,0 +1,24 @@ +package mdns + +import ( + "syscall" +) + +func SetsockoptInt(fd uintptr, level, opt int, value int) (err error) { + // change SO_REUSEADDR and REUSEPORT flags simultaneously for BSD-like OS + // https://github.com/AlexxIT/go2rtc/issues/626 + // https://stackoverflow.com/questions/14388706/how-do-so-reuseaddr-and-so-reuseport-differ/14388707 + if opt == syscall.SO_REUSEADDR { + if err = syscall.SetsockoptInt(int(fd), level, opt, value); err != nil { + return + } + + opt = syscall.SO_REUSEPORT + } + + return syscall.SetsockoptInt(int(fd), level, opt, value) +} + +func SetsockoptIPMreq(fd uintptr, level, opt int, mreq *syscall.IPMreq) (err error) { + return syscall.SetsockoptIPMreq(int(fd), level, opt, mreq) +} diff --git a/pkg/mdns/syscall.go b/pkg/mdns/syscall_linux.go similarity index 86% rename from pkg/mdns/syscall.go rename to pkg/mdns/syscall_linux.go index f678b684..fc0caeb0 100644 --- a/pkg/mdns/syscall.go +++ b/pkg/mdns/syscall_linux.go @@ -1,8 +1,8 @@ -//go:build darwin || linux - package mdns -import "syscall" +import ( + "syscall" +) func SetsockoptInt(fd uintptr, level, opt int, value int) (err error) { return syscall.SetsockoptInt(int(fd), level, opt, value)