golang use json-rpc call sometime got unexpected EOF

68 Views Asked by At

I have a client, will sent request to haproxy,two bankend.sometimes, the client got unexpected EOF error,but check log did not see any other error. i have no idea .

this is client code

 func (this *SingleConnRpcClient) Call(method string, args interface{}, reply interface{}) error {

    this.Lock()
    defer this.Unlock()

    err := this.serverConn()
    if err != nil {
        return err
    }

    timeout := time.Duration(10 * time.Second)
    done := make(chan error, 1)

    go func() {
        err := this.rpcClient.Call(method, args, reply)
        done <- err
    }()

    select {
    case <-time.After(timeout):
        this.close()
        tools.LogInfo(fmt.Sprintf("rpc call timeout %s", this.RpcServer))
    case err := <-done:
        if err != nil {
            this.close()
            return err
        }
    }

    return nil
}

server code

addr := g.Config().Rpc.Listen
    tcpAddr, err := net.ResolveTCPAddr("tcp", addr)
    if err != nil {
        log.Fatalf("net.ResolveTCPAddr fail: %s", err)
    }

    listener, err := net.ListenTCP("tcp", tcpAddr)
    if err != nil {
        log.Fatalf("listen %s fail: %s", addr, err)
    } else {
        log.Println("rpc listening", addr)
    }

    server := rpc.NewServer()
    server.Register(new(Transfer))

    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Println("listener.Accept occur error:", err)
            continue
        }
        go server.ServeCodec(jsonrpc.NewServerCodec(conn))
    }

This is an occasional issue and no clues were found. Only this occasional error will appear before and after checking the logs

0

There are 0 best solutions below