Fix syscalls on different archs

This commit is contained in:
Alexey Khit
2023-07-20 23:29:27 +03:00
parent 7308652f6e
commit 9d4f4e1509
3 changed files with 29 additions and 5 deletions
+5 -5
View File
@@ -145,7 +145,7 @@ func (b *Browser) ListenMulticastUDP() error {
Control: func(network, address string, c syscall.RawConn) error {
return c.Control(func(fd uintptr) {
// 1. Allow multicast UDP to listen concurrently across multiple listeners
_ = syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
_ = SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
})
},
}
@@ -167,21 +167,21 @@ func (b *Browser) ListenMulticastUDP() error {
Control: func(network, address string, c syscall.RawConn) error {
return c.Control(func(fd uintptr) {
// 1. Allow multicast UDP to listen concurrently across multiple listeners
_ = syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
_ = SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
// 2. Disable loop responses
_ = syscall.SetsockoptInt(syscall.Handle(fd), syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, 0)
_ = SetsockoptInt(fd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, 0)
// 3. Allow receive multicast responses on all this addresses
mreq := &syscall.IPMreq{
Multiaddr: [4]byte{224, 0, 0, 251},
}
_ = syscall.SetsockoptIPMreq(syscall.Handle(fd), syscall.IPPROTO_IP, syscall.IP_ADD_MEMBERSHIP, mreq)
_ = SetsockoptIPMreq(fd, syscall.IPPROTO_IP, syscall.IP_ADD_MEMBERSHIP, mreq)
for _, send := range b.Sends {
addr := send.LocalAddr().(*net.UDPAddr)
mreq.Interface = [4]byte(addr.IP.To4())
_ = syscall.SetsockoptIPMreq(syscall.Handle(fd), syscall.IPPROTO_IP, syscall.IP_ADD_MEMBERSHIP, mreq)
_ = SetsockoptIPMreq(fd, syscall.IPPROTO_IP, syscall.IP_ADD_MEMBERSHIP, mreq)
}
})
},
+13
View File
@@ -0,0 +1,13 @@
//go:build darwin || linux
package mdns
import "syscall"
func SetsockoptInt(fd uintptr, level, opt int, value int) (err error) {
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)
}
+11
View File
@@ -0,0 +1,11 @@
package mdns
import "syscall"
func SetsockoptInt(fd uintptr, level, opt int, value int) (err error) {
return syscall.SetsockoptInt(syscall.Handle(fd), level, opt, value)
}
func SetsockoptIPMreq(fd uintptr, level, opt int, mreq *syscall.IPMreq) (err error) {
return syscall.SetsockoptIPMreq(syscall.Handle(fd), level, opt, mreq)
}