From dbc3d9c9e0176b0255f7df32c3eca7e93f9d8c96 Mon Sep 17 00:00:00 2001 From: forthxu Date: Tue, 29 May 2018 09:27:35 +0800 Subject: [PATCH] update allow bind local ip to reach network --- client.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/client.go b/client.go index 41f8ed5..9779d33 100644 --- a/client.go +++ b/client.go @@ -82,6 +82,9 @@ type Dialer struct { // If Jar is nil, cookies are not sent in requests and ignored // in responses. Jar http.CookieJar + + //bind local ip + LocalAddr string } var errMalformedURL = errors.New("malformed ws or wss URL") @@ -212,7 +215,21 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re // Get network dial function. netDial := d.NetDial if netDial == nil { - netDialer := &net.Dialer{Deadline: deadline} + + var netDialer *net.Dialer + if len(d.LocalAddr) > 0 { + localAddr, err := net.ResolveIPAddr("ip", d.LocalAddr) + if err != nil { + return nil, nil, err + } + localTCPAddr := net.TCPAddr{ + IP: localAddr.IP, + } + netDialer = &net.Dialer{Deadline: deadline, LocalAddr: &localTCPAddr} + } else { + netDialer = &net.Dialer{Deadline: deadline} + } + netDial = netDialer.Dial }