udp_android.go 672 B

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