我和你在同一个操作系统上,但我无法重现你的问题。我正在使用 Go 版本 1.7.4。我还没有在 Go 1.8 上测试过,但它今天早些时候发布了。
我创建了两个文件,server.go 和 client.go(转载如下)。当我运行它们时,我获得了超过 140 个连接。在运行之前,我切换到 root 并像这样设置 ulimit:
$ sudo -s
$ ulimit -n 10000
客户端输出:
Established 1 connections
...
Established 2971 connections
panic: dial tcp 127.0.0.1:1337: socket: too many open files in system
服务器输出的东西非常相似。
这里是client.go:
package main
import (
"fmt"
"net"
)
func main() {
var numConns int
for {
_, err := net.Dial("tcp", "127.0.0.1:1337")
if err != nil {
panic(err)
}
numConns++
fmt.Println("Established", numConns, "connections")
}
}
还有 server.go:
package main
import (
"fmt"
"net"
)
func main() {
listener, err := net.Listen("tcp", ":1337")
if err != nil {
panic(err)
}
var numConns int
for {
_, err := listener.Accept()
if err != nil {
panic(err)
}
numConns++
fmt.Println("Got", numConns, "connections")
}
}