func checkProxy(proxy string, timeout int) bool {proxyUrl, err := url.Parse("http://" + proxy)httpClient := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl),Dial: func(netw, addr string) (net.Conn, error) {deadline := time.Now().Add(time.Duration(timeout) * time.Second)c, err := net.DialTimeout(netw, addr, time.Second*time.Duration(timeout))if err != nil {return nil, err}c.SetDeadline(deadline)return c, nil},ResponseHeaderTimeout: time.Duration(timeout) * time.Second,DisableKeepAlives: true,},}req, err := http.NewRequest("GET", "http://www.urltocheck.com", nil)req.Close = trueresp, err := httpClient.Do(req)if err != nil {return false}
body, _ := ioutil.ReadAll(resp.Body)if strings.Contains(string(body), "xxx") {return true} else {return false}}
8054 @ 0x41a716 0x4080d4 0x407d22 0x488021 0x41a8e0 # 0x4080d4 selectgo+0x384 /usr/local/go/src/pkg/runtime/chan.c:996 # 0x407d22 runtime.selectgo+0x12 /usr/local/go/src/pkg/runtime/chan.c:840 # 0x488021 net/http.(*persistConn).writeLoop+0x271 /usr/local/go/src/pkg/net/http/transport.go:791 8030 @ 0x41a716 0x4072d2 0x407718 0x4879cf 0x41a8e0 # 0x4879cf net/http.(*persistConn).readLoop+0x68f /usr/local/go/src/pkg/net/http/transport.go:778
You might want to try tip just to be sure, there's been some work done around http client and keepalive connections.
goroutine 3317 [chan receive]: net/http.(*persistConn).readLoop(0xc216c06680) /usr/local/go/src/pkg/net/http/transport.go:778 +0x68f created by net/http.(*Transport).dialConn /usr/local/go/src/pkg/net/http/transport.go:528 +0x607 goroutine 2908 [select]: net/http.(*persistConn).writeLoop(0xc216a68880) /usr/local/go/src/pkg/net/http/transport.go:791 +0x271 created by net/http.(*Transport).dialConn /usr/local/go/src/pkg/net/http/transport.go:529 +0x61e goroutine 3318 [select]: net/http.(*persistConn).writeLoop(0xc216c06680) /usr/local/go/src/pkg/net/http/transport.go:791 +0x271 created by net/http.(*Transport).dialConn /usr/local/go/src/pkg/net/http/transport.go:529 +0x61e goroutine 3513 [select]: net/http.(*persistConn).writeLoop(0xc21627d180) /usr/local/go/src/pkg/net/http/transport.go:791 +0x271 created by net/http.(*Transport).dialConn /usr/local/go/src/pkg/net/http/transport.go:529 +0x61e goroutine 2205 [chan receive]: net/http.(*persistConn).readLoop(0xc213a08b80) /usr/local/go/src/pkg/net/http/transport.go:778 +0x68f created by net/http.(*Transport).dialConn /usr/local/go/src/pkg/net/http/transport.go:528 +0x607 goroutine 2206 [select]: net/http.(*persistConn).writeLoop(0xc213a08b80) /usr/local/go/src/pkg/net/http/transport.go:791 +0x271 created by net/http.(*Transport).dialConn /usr/local/go/src/pkg/net/http/transport.go:529 +0x61e goroutine 3391 [chan receive]: net/http.(*persistConn).readLoop(0xc216a3cc00) /usr/local/go/src/pkg/net/http/transport.go:778 +0x68f created by net/http.(*Transport).dialConn /usr/local/go/src/pkg/net/http/transport.go:528 +0x607 goroutine 3392 [select]: net/http.(*persistConn).writeLoop(0xc216a3cc00) /usr/local/go/src/pkg/net/http/transport.go:791 +0x271 created by net/http.(*Transport).dialConn /usr/local/go/src/pkg/net/http/transport.go:529 +0x61e
There is a bug in "net\http\client.go".
I created an issues: http://code.google.com/p/go/issues/detail?id=7620.
Just modify "net\http\client.go":
------------------------------------------
if err != nil { if resp != nil { +++++ if resp.Body != nil { +++++ resp.Body.Close() +++++ }
log.Printf("RoundTripper returned a response & error; ignoring response") } return nil, err }
------------------------------------------
Why nobody deal with the issus since I reported it weeks ago?
transport := &httpclient.Transport{
Proxy: http.ProxyURL(proxyUrl),Dial: func(netw, addr string) (net.Conn, error) {deadline := time.Now().Add(time.Duration(timeout) * time.Second)c, err := net.DialTimeout(netw, addr, time.Second*time.Duration(timeout))if err != nil {return nil, err}c.SetDeadline(deadline)return c, nil},ResponseHeaderTimeout: time.Duration(timeout) * time.Second,DisableKeepAlives: true,
ConnectTimeout: time.Duration(timeout) * time.Second,RequestTimeout: time.Duration(timeout) * time.Second * 2,ReadWriteTimeout: time.Duration(timeout) * time.Second,}
4421 @ 0x416549 0x429630 0x428e9d 0x44ebd6 0x44eca2 0x451826 0x460cc9 0x53e48e 0x53e389 0x499646 0x4167e0 # 0x429630 netpollblock+0x130 /usr/local/go/src/pkg/runtime/netpoll.goc:349 # 0x428e9d net.runtime_pollWait+0x5d /usr/local/go/src/pkg/runtime/netpoll.goc:146 # 0x44ebd6 net.(*pollDesc).Wait+0x46 /usr/local/go/src/pkg/net/fd_poll_runtime.go:84 # 0x44eca2 net.(*pollDesc).WaitWrite+0x42 /usr/local/go/src/pkg/net/fd_poll_runtime.go:93 # 0x451826 net.(*netFD).Write+0x466 /usr/local/go/src/pkg/net/fd_unix.go:325 # 0x460cc9 net.(*conn).Write+0xe9 /usr/local/go/src/pkg/net/net.go:130 # 0x53e48e bufio.(*Writer).flush+0xde /usr/local/go/src/pkg/bufio/bufio.go:501 # 0x53e389 bufio.(*Writer).Flush+0x39 /usr/local/go/src/pkg/bufio/bufio.go:490 # 0x499646 net/http.(*persistConn).writeLoop+0x206 /usr/local/go/src/pkg/net/http/transport.go:890 4445 @ 0x416549 0x429630 0x428e9d 0x44ebd6 0x44ec42 0x4504d2 0x460ba9 0x49a7ba 0x4a38df 0x53c573 0x53c75d 0x498a16 0x4167e0 # 0x429630 netpollblock+0x130 /usr/local/go/src/pkg/runtime/netpoll.goc:349 # 0x428e9d net.runtime_pollWait+0x5d /usr/local/go/src/pkg/runtime/netpoll.goc:146 # 0x44ebd6 net.(*pollDesc).Wait+0x46 /usr/local/go/src/pkg/net/fd_poll_runtime.go:84 # 0x44ec42 net.(*pollDesc).WaitRead+0x42 /usr/local/go/src/pkg/net/fd_poll_runtime.go:89 # 0x4504d2 net.(*netFD).Read+0x332 /usr/local/go/src/pkg/net/fd_unix.go:232 # 0x460ba9 net.(*conn).Read+0xe9 /usr/local/go/src/pkg/net/net.go:122 # 0x49a7ba net/http.noteEOFReader.Read+0x7a /usr/local/go/src/pkg/net/http/transport.go:1148 # 0x4a38df net/http.(*noteEOFReader).Read+0xdf /usr/local/go/src/pkg/net/http/chunked.go:1 # 0x53c573 bufio.(*Reader).fill+0x143 /usr/local/go/src/pkg/bufio/bufio.go:92 # 0x53c75d bufio.(*Reader).Peek+0x11d /usr/local/go/src/pkg/bufio/bufio.go:120 # 0x498a16 net/http.(*persistConn).readLoop+0xd6 /usr/local/go/src/pkg/net/http/transport.go:770
go addJobs(jobs, results)for i := 0; i < workers; i++ {go doJobs(jobs, timeout)}
goroutine 869 [select, 2 minutes]:
net/http.(*persistConn).readLoop(0xc208956fd0)
/usr/local/go/src/pkg/net/http/transport.go:868 +0x829
created by net/http.(*Transport).dialConn
/usr/local/go/src/pkg/net/http/transport.go:600 +0x93f
goroutine 778 [select, 2 minutes]:
net/http.(*persistConn).writeLoop(0xc208956bb0)
/usr/local/go/src/pkg/net/http/transport.go:885 +0x38f
created by net/http.(*Transport).dialConn
/usr/local/go/src/pkg/net/http/transport.go:601 +0x957
goroutine 515 [select, 2 minutes]:
net/http.(*persistConn).readLoop(0xc2086878c0)
/usr/local/go/src/pkg/net/http/transport.go:868 +0x829
created by net/http.(*Transport).dialConn
/usr/local/go/src/pkg/net/http/transport.go:600 +0x93f
goroutine 664 [select, 2 minutes]:
net/http.(*persistConn).readLoop(0xc208957760)
/usr/local/go/src/pkg/net/http/transport.go:868 +0x829
created by net/http.(*Transport).dialConn
/usr/local/go/src/pkg/net/http/transport.go:600 +0x93f
--
You received this message because you are subscribed to a topic in the Google Groups "golang-nuts" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/golang-nuts/FnJZ9iZ0i_g/unsubscribe.
To unsubscribe from this group and all its topics, send an email to golang-nuts...@googlegroups.com.