【发布时间】:2014-04-20 04:00:44
【问题描述】:
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
}
【问题讨论】:
-
TFM 说:
Call invokes the named function, waits for it to complete, and returns its error status.这并没有具体说明除此之外会发生什么。如果由于网络错误、错误甚至恐慌导致执行确认无法到达客户端,可能会发生什么情况。