什么时候c.Call(...)
返回非nil值?
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
在源代码中查看了内容net/rpc
,则会看到很多行在何处call.Error
设置。这些应该向您显示所有Call
将返回错误的条件。
他们中许多人都在从遇到错误产生ClientCodec.WriteRequest
和ClientCodec.ReadResponseBody
。有关更多详细信息,请参阅ClientCodec
文档。
遇到意外的EOF以及ErrShutdown
客户端关闭时,也可能会出现一些错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句