【发布时间】:2015-08-18 07:14:07
【问题描述】:
我在 VM 上使用 CentOS 6.5 编程,用 C 编写代码
我打了个电话
client_status = clnt_call( clnt, NFSPROC3_GETATTR,
(xdrproc_t)xdr_GETATTR3args, (caddr_t)&args,
(xdrproc_t)xdr_GETATTR3res, (caddr_t)&result, TIMEOUT);
其中 clnt 是我创建一次使用 clnt_call 并保留它以供下一次调用的客户端(而不是为每个调用创建一个新的)
- 我仍然没有意识到触发它的原因是什么,但偶尔我会收到一条消息“RPC:无法接收”,随后会破坏客户端并创建一个新客户端进行重新传输 - 这始终有效。
-
当使用 tcpdump 观察实际发生的情况时,我看到的是在 NFSPROC3_GETATTR 发送后(包含所有正确信息),60 微秒后客户端发送 TCP [FIN, ACK] 消息。
- 也许 tcp dump 在中间丢弃了一些数据包(但我对此表示怀疑)
什么会导致连接出现这种情况? 我尝试查看 clnt_calls 和 Authenticator 之间的变化保持不变,所有信息保持不变,但可能长时间不活动会使服务器失去连接,只能通过创建新客户端来解决。
【问题讨论】:
标签: sockets tcp client rpc nfs