From 54323312d8c4cf4a63ba6a64eeb74689eaed01a3 Mon Sep 17 00:00:00 2001 From: e1732a364fed <75717694+e1732a364fed@users.noreply.github.com> Date: Sat, 1 Jan 2000 00:00:00 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20listen=E5=92=8Cdial=20?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89network=E7=9A=84=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8Ccloses=20#91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- netLayer/dial.go | 11 ++++++++++- netLayer/listen.go | 10 ++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/netLayer/dial.go b/netLayer/dial.go index 8932ec1..47af47b 100644 --- a/netLayer/dial.go +++ b/netLayer/dial.go @@ -7,12 +7,16 @@ import ( "time" ) +var ( + CustomDialerMap = make(map[string]func(address string, timeout time.Duration) (net.Conn, error)) +) + func (a *Addr) Dial() (net.Conn, error) { var istls bool var resultConn net.Conn var err error - switch a.Network { + switch n := a.Network; n { case "": a.Network = "tcp" goto tcp @@ -30,6 +34,11 @@ func (a *Addr) Dial() (net.Conn, error) { return DialUDP(ua) default: + if len(CustomDialerMap) > 0 { + if f := CustomDialerMap[n]; f != nil { + return f(a.String(), time.Second*15) + } + } goto defaultPart diff --git a/netLayer/listen.go b/netLayer/listen.go index f7cbc42..559ea8a 100644 --- a/netLayer/listen.go +++ b/netLayer/listen.go @@ -13,6 +13,10 @@ import ( "go.uber.org/zap" ) +var ( + CustomListenerMap = make(map[string]func(address string) (net.Listener, error)) +) + func loopAccept(listener net.Listener, xver int, acceptFunc func(net.Conn)) { if xver > 0 { @@ -147,6 +151,12 @@ func ListenAndAccept(network, addr string, sockopt *Sockopt, xver int, acceptFun fallthrough default: + if len(CustomListenerMap) > 0 { + if f := CustomListenerMap[network]; f != nil { + return f(addr) + } + } + listener, err = net.Listen(network, addr) if err != nil { return