当前位置 : 主页 > 大数据 > 区块链 >

什么可以导致client.Call rpc在Go(golang)中返回错误?

来源:互联网 收集:自由互联 发布时间:2021-06-22
c.Call(…)什么时候返回非零值? c.Call(…)只能在发生网络故障时丢失一个错误(数据包丢失或超时或沿着这些线路)? 如果服务器srv崩溃,c.Call(…)会返回错误吗? 具体来说,c.Call(…)可以在
c.Call(…)什么时候返回非零值?

c.Call(…)只能在发生网络故障时丢失一个错误(数据包丢失或超时或沿着这些线路)?

如果服务器srv崩溃,c.Call(…)会返回错误吗?

具体来说,c.Call(…)可以在请求成功到达srv之后返回错误,但是在rpcname处理函数返回之前?

import (
    "net/rpc"
    "fmt"
)

func call(srv string, rpcname string, args interface{}, reply interface{}) bool {
    c, errx := rpc.Dial("unix", srv)
    if errx != nil {
        return false
    }
    defer c.Close()

    err := c.Call(rpcname, args, reply)
    if err == nil {
        return true
    }

    fmt.Println(err)
    return false
}
如果你看一下 client.go in the source code for net/rpc,你会看到很多行,其中设置了call.Error.这些应该显示Call将返回错误的所有条件.

其中许多是在遇到来自ClientCodec.WriteRequest和ClientCodec.ReadResponseBody的错误时生成的.有关详细信息,请参阅ClientCodec docs.

遇到意外EOF时也会出现几个错误,客户端关闭时会出现ErrShutdown.

网友评论