package net
import (
"runtime"
"syscall"
)
func joinIPv4Group (fd *netFD , ifi *Interface , ip IP ) error {
mreq := &syscall .IPMreq {Multiaddr : [4 ]byte {ip [0 ], ip [1 ], ip [2 ], ip [3 ]}}
if err := setIPv4MreqToInterface (mreq , ifi ); err != nil {
return err
}
err := fd .pfd .SetsockoptIPMreq (syscall .IPPROTO_IP , syscall .IP_ADD_MEMBERSHIP , mreq )
runtime .KeepAlive (fd )
return wrapSyscallError ("setsockopt" , err )
}
func setIPv6MulticastInterface (fd *netFD , ifi *Interface ) error {
var v int
if ifi != nil {
v = ifi .Index
}
err := fd .pfd .SetsockoptInt (syscall .IPPROTO_IPV6 , syscall .IPV6_MULTICAST_IF , v )
runtime .KeepAlive (fd )
return wrapSyscallError ("setsockopt" , err )
}
func setIPv6MulticastLoopback (fd *netFD , v bool ) error {
err := fd .pfd .SetsockoptInt (syscall .IPPROTO_IPV6 , syscall .IPV6_MULTICAST_LOOP , boolint (v ))
runtime .KeepAlive (fd )
return wrapSyscallError ("setsockopt" , err )
}
func joinIPv6Group (fd *netFD , ifi *Interface , ip IP ) error {
mreq := &syscall .IPv6Mreq {}
copy (mreq .Multiaddr [:], ip )
if ifi != nil {
mreq .Interface = uint32 (ifi .Index )
}
err := fd .pfd .SetsockoptIPv6Mreq (syscall .IPPROTO_IPV6 , syscall .IPV6_JOIN_GROUP , mreq )
runtime .KeepAlive (fd )
return wrapSyscallError ("setsockopt" , err )
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .