1
0

udp_android.go 807 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. //go:build !e2e_testing
  2. package udp
  3. import (
  4. "fmt"
  5. "log/slog"
  6. "net"
  7. "syscall"
  8. "golang.org/x/sys/unix"
  9. )
  10. func NewListener(l *slog.Logger, s Settings) (Conn, error) {
  11. return NewGenericListener(l, s)
  12. }
  13. func NewListenConfig(multi bool) net.ListenConfig {
  14. return net.ListenConfig{
  15. Control: func(network, address string, c syscall.RawConn) error {
  16. if multi {
  17. var controlErr error
  18. err := c.Control(func(fd uintptr) {
  19. if err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, unix.SO_REUSEPORT, 1); err != nil {
  20. controlErr = fmt.Errorf("SO_REUSEPORT failed: %v", err)
  21. return
  22. }
  23. })
  24. if err != nil {
  25. return err
  26. }
  27. if controlErr != nil {
  28. return controlErr
  29. }
  30. }
  31. return nil
  32. },
  33. }
  34. }
  35. func (u *GenericConn) Rebind() error {
  36. return nil
  37. }