github.com/kelleygo/clashcore@v1.0.2/component/dialer/patch_android.go (about)

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