mirror of
https://github.com/xjasonlyu/tun2socks.git
synced 2025-10-06 01:07:03 +08:00
Chore: make set operation atomic
This commit is contained in:
@@ -8,6 +8,8 @@ import (
|
||||
|
||||
M "github.com/xjasonlyu/tun2socks/constant"
|
||||
"github.com/xjasonlyu/tun2socks/proxy/proto"
|
||||
|
||||
"go.uber.org/atomic"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -15,7 +17,7 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
_defaultDialer Dialer = &Base{}
|
||||
_defaultDialer atomic.Value
|
||||
)
|
||||
|
||||
type Dialer interface {
|
||||
@@ -29,24 +31,28 @@ type Proxy interface {
|
||||
Proto() proto.Proto
|
||||
}
|
||||
|
||||
func init() {
|
||||
_defaultDialer.Store(&Base{})
|
||||
}
|
||||
|
||||
// SetDialer sets default Dialer.
|
||||
func SetDialer(d Dialer) {
|
||||
_defaultDialer = d
|
||||
_defaultDialer.Store(d)
|
||||
}
|
||||
|
||||
// Dial uses default Dialer to dial TCP.
|
||||
func Dial(metadata *M.Metadata) (net.Conn, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), tcpConnectTimeout)
|
||||
defer cancel()
|
||||
return _defaultDialer.DialContext(ctx, metadata)
|
||||
return _defaultDialer.Load().(Dialer).DialContext(ctx, metadata)
|
||||
}
|
||||
|
||||
// DialContext uses default Dialer to dial TCP with context.
|
||||
func DialContext(ctx context.Context, metadata *M.Metadata) (net.Conn, error) {
|
||||
return _defaultDialer.DialContext(ctx, metadata)
|
||||
return _defaultDialer.Load().(Dialer).DialContext(ctx, metadata)
|
||||
}
|
||||
|
||||
// DialUDP uses default Dialer to dial UDP.
|
||||
func DialUDP(metadata *M.Metadata) (net.PacketConn, error) {
|
||||
return _defaultDialer.DialUDP(metadata)
|
||||
return _defaultDialer.Load().(Dialer).DialUDP(metadata)
|
||||
}
|
||||
|
Reference in New Issue
Block a user