udp_freebsd.go 781 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // +build !e2e_testing
  2. package nebula
  3. // FreeBSD support is primarily implemented in udp_generic, besides NewListenConfig
  4. import (
  5. "fmt"
  6. "net"
  7. "syscall"
  8. "golang.org/x/sys/unix"
  9. )
  10. func NewListenConfig(multi bool) net.ListenConfig {
  11. return net.ListenConfig{
  12. Control: func(network, address string, c syscall.RawConn) error {
  13. if multi {
  14. var controlErr error
  15. err := c.Control(func(fd uintptr) {
  16. if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, unix.SO_REUSEPORT, 1); err != nil {
  17. controlErr = fmt.Errorf("SO_REUSEPORT failed: %v", err)
  18. return
  19. }
  20. })
  21. if err != nil {
  22. return err
  23. }
  24. if controlErr != nil {
  25. return controlErr
  26. }
  27. }
  28. return nil
  29. },
  30. }
  31. }
  32. func (u *udpConn) Rebind() error {
  33. return nil
  34. }