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
}
答案 0 :(得分:1)
如果您查看client.go
in the source code for net/rpc
,您会看到设置call.Error
的很多行。这些应该显示Call
将返回错误的所有条件。
其中许多是在遇到来自ClientCodec.WriteRequest
和ClientCodec.ReadResponseBody
的错误时生成的。有关详细信息,请参阅ClientCodec
docs。
遇到意外的EOF时也会出现几个错误,而客户端关闭时会出现ErrShutdown
。