Go套接字服务器收到EOF错误?

Go套接字服务器收到EOF错误?,go,Go,我的代码: var connMax int = 0 func CheckErr(err error) { if err != nil { fmt.Fprintf(os.Stderr, "Error occured: %s\n", err) os.Exit(1) } } func handler(conn net.Conn) { defer conn.Close()

我的代码:

    var connMax int = 0

    func CheckErr(err error) {
        if err != nil {
            fmt.Fprintf(os.Stderr, "Error occured: %s\n", err)
            os.Exit(1)
        }
    }

    func handler(conn net.Conn) {
        defer conn.Close()

        var buf [512]byte
        n, err := conn.Read(buf[0:])
        CheckErr(err)

        connMax += 1
        fmt.Println(connMax)

        result := bytes.NewBuffer(nil)
        result.Write(buf[0:n])

        fmt.Println(string(result.Bytes()))

        conn.Write([]byte("HTTP/1.1 201 OK\r\n"))

    func Run() {
        ln, err := net.Listen("tcp", ":8080")
        CheckErr(err)
        for {
            conn, err := ln.Accept()
            CheckErr(err)
            go handler(conn)
        }
    }
我尝试使用apache2 utils包的命令
ab
测试服务器。
ab-c 1500-n 10000http://127.0.0.1:8080/

完成后,会发生EOF错误,因此进程退出:
io.EOF
表示另一端已关闭连接。我猜这是因为ab达到了打开文件描述符的限制,所以连接关闭了。使用
ulimit-a
检查它。如果小于10000,请使用
ulimit-n 65536
对其进行更改。这将允许超过10000个连接。我随机选择65536,您需要root权限才能进行此配置。

io.EOF
表示连接已被另一端关闭。我猜这是因为ab达到了打开文件描述符的限制,所以连接关闭了。使用
ulimit-a
检查它。如果小于10000,请使用
ulimit-n 65536
对其进行更改。这将允许超过10000个连接。我随机选择65536,您需要root权限才能进行此配置。

您的操作系统限制打开多少个文件描述符?使用
ulimit-a
检查它。我猜不到10000个。还要看看你的操作系统限制了多少打开的文件描述符?使用
ulimit-a
检查它。我猜不到10000。也看到了吗