2023-11-17 23:12:10 +08:00
|
|
|
//go:build android && cmfa
|
2023-11-17 01:19:20 +08:00
|
|
|
|
|
|
|
package dialer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"net"
|
|
|
|
"syscall"
|
|
|
|
)
|
|
|
|
|
|
|
|
type SocketControl func(network, address string, conn syscall.RawConn) error
|
|
|
|
|
|
|
|
var DefaultSocketHook SocketControl
|
|
|
|
|
2024-08-13 13:33:24 +08:00
|
|
|
func dialContextHooked(ctx context.Context, dialer *net.Dialer, network string, address string) (net.Conn, error) {
|
|
|
|
addControlToDialer(dialer, func(ctx context.Context, network, address string, c syscall.RawConn) error {
|
|
|
|
return DefaultSocketHook(network, address, c)
|
|
|
|
})
|
2023-11-17 01:19:20 +08:00
|
|
|
|
2024-08-13 13:33:24 +08:00
|
|
|
conn, err := dialer.DialContext(ctx, network, address)
|
2023-11-17 01:19:20 +08:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
if t, ok := conn.(*net.TCPConn); ok {
|
|
|
|
t.SetKeepAlive(false)
|
|
|
|
}
|
|
|
|
|
|
|
|
return conn, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func listenPacketHooked(ctx context.Context, network, address string) (net.PacketConn, error) {
|
|
|
|
lc := &net.ListenConfig{
|
|
|
|
Control: DefaultSocketHook,
|
|
|
|
}
|
|
|
|
|
|
|
|
return lc.ListenPacket(ctx, network, address)
|
|
|
|
}
|