Closed
Description
simple app to reproduce error
package main
import (
"log"
"net/http"
)
func pan(err error) {
if err != nil {
log.Fatal(err)
}
}
func doRequest() {
req, err := http.NewRequest("GET", "http://example.com/", nil)
pan(err)
_, err = client.Do(req)
pan(err)
}
var client http.Client
func main() {
i := 0
for {
log.Println(i)
doRequest()
i++
}
}
This app doesn't close response.Body and leaves opened file descriptors.
[kirillvr@yao-local ~]$ ulimit -n 10
[kirillvr@yao-local ~]$ go version
go version go1.6rc2 linux/amd64
[kirillvr@yao-local ~]$ go run too_many_files.go
2016/02/11 10:24:30 0
2016/02/11 10:24:30 1
2016/02/11 10:24:30 2
2016/02/11 10:24:31 3
2016/02/11 10:24:32 4
2016/02/11 10:24:32 5
2016/02/11 10:24:32 Get http://example.com/: dial tcp [2606:2800:220:1:248:1893:25c8:1946]:80: connect: network is unreachable
exit status 1
[kirillvr@yao-local ~]$ ~/go1.4/bin/go version
go version go1.4.3 linux/amd64
[kirillvr@yao-local ~]$ ~/go1.4/bin/go run too_many_files.go
2016/02/11 10:24:49 0
2016/02/11 10:24:50 1
2016/02/11 10:24:50 2
2016/02/11 10:24:50 3
2016/02/11 10:24:51 4
2016/02/11 10:24:51 5
2016/02/11 10:24:52 6
2016/02/11 10:24:52 Get http://example.com/: dial tcp: lookup example.com: too many open files
exit status 1
go 1.4 returns correct error message, but go1.5 and 1.6 shows possibly confusing error message