patch_android.go 809 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. //go:build android
  2. package dialer
  3. import (
  4. "context"
  5. "net"
  6. "net/netip"
  7. "syscall"
  8. )
  9. type SocketControl func(network, address string, conn syscall.RawConn) error
  10. var DefaultSocketHook SocketControl
  11. func dialContextHooked(ctx context.Context, network string, destination netip.Addr, port string) (net.Conn, error) {
  12. dialer := &net.Dialer{
  13. Control: DefaultSocketHook,
  14. }
  15. conn, err := dialer.DialContext(ctx, network, net.JoinHostPort(destination.String(), port))
  16. if err != nil {
  17. return nil, err
  18. }
  19. if t, ok := conn.(*net.TCPConn); ok {
  20. _ = t.SetKeepAlive(false)
  21. }
  22. return conn, nil
  23. }
  24. func listenPacketHooked(ctx context.Context, network, address string) (net.PacketConn, error) {
  25. lc := &net.ListenConfig{
  26. Control: DefaultSocketHook,
  27. }
  28. return lc.ListenPacket(ctx, network, address)
  29. }