sockoptip_windows.go 819 B

123456789101112131415161718192021222324252627282930
  1. // Copyright 2011 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package net
  5. import (
  6. "os"
  7. "runtime"
  8. "syscall"
  9. "unsafe"
  10. )
  11. func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error {
  12. ip, err := interfaceToIPv4Addr(ifi)
  13. if err != nil {
  14. return os.NewSyscallError("setsockopt", err)
  15. }
  16. var a [4]byte
  17. copy(a[:], ip.To4())
  18. err = fd.pfd.Setsockopt(syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, (*byte)(unsafe.Pointer(&a[0])), 4)
  19. runtime.KeepAlive(fd)
  20. return wrapSyscallError("setsockopt", err)
  21. }
  22. func setIPv4MulticastLoopback(fd *netFD, v bool) error {
  23. err := fd.pfd.SetsockoptInt(syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, boolint(v))
  24. runtime.KeepAlive(fd)
  25. return wrapSyscallError("setsockopt", err)
  26. }