Created
September 25, 2018 06:21
-
-
Save xiezhenye/8e85155b1bb4fc46a206ad6a54ba32ea to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"net" | |
"fmt" | |
"time" | |
"context" | |
) | |
func Dialer(ctx context.Context, network, address string) (conn net.Conn, err error) { | |
var d net.Dialer | |
fmt.Println(ctx, network, address) | |
conn, err = d.DialContext(ctx, network, address) | |
fmt.Println("Dial!", err) | |
//return conn, err | |
if err != nil { | |
fmt.Println("dial err: " + err.Error()) | |
return conn, err | |
} | |
return &ConnProxy{ target: conn }, nil | |
} | |
type ConnProxy struct { | |
target net.Conn | |
} | |
func (p *ConnProxy) Read(b []byte) (n int, err error) { | |
n, err = p.target.Read(b) | |
fmt.Println("read: ", b, n, err) | |
return | |
} | |
func (p *ConnProxy) Write(b []byte) (n int, err error) { | |
n, err = p.target.Write(b) | |
fmt.Println("write: ", b, n, err) | |
return | |
} | |
func (p *ConnProxy) Close() error { | |
return p.target.Close() | |
} | |
func (p *ConnProxy) LocalAddr() net.Addr { | |
return p.target.LocalAddr() | |
} | |
func (p *ConnProxy) RemoteAddr() net.Addr { | |
return p.target.RemoteAddr() | |
} | |
func (p *ConnProxy) SetDeadline(t time.Time) error { | |
return p.target.SetDeadline(t) | |
} | |
func (p *ConnProxy) SetReadDeadline(t time.Time) error { | |
return p.target.SetReadDeadline(t) | |
} | |
func (p *ConnProxy) SetWriteDeadline(t time.Time) error { | |
return p.target.SetWriteDeadline(t) | |
} | |
func init() { | |
net.DefaultResolver = &net.Resolver{ | |
PreferGo: true, | |
Dial: Dialer, | |
} | |
} | |
func main() { | |
/* | |
net.DefaultResolver = &net.Resolver{ | |
PreferGo: true, | |
Dial: Dialer, | |
}*/ | |
//init() | |
names, err := net.LookupHost("www.baidu.com") | |
fmt.Printf("%+v, %v\n", names, err) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment