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