Skip to content

Instantly share code, notes, and snippets.

@xiezhenye
Created September 25, 2018 06:21
Show Gist options
  • Save xiezhenye/8e85155b1bb4fc46a206ad6a54ba32ea to your computer and use it in GitHub Desktop.
Save xiezhenye/8e85155b1bb4fc46a206ad6a54ba32ea to your computer and use it in GitHub Desktop.
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