Fix syscalls on different archs
This commit is contained in:
+5
-5
@@ -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)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user