我在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创建的客户端,并保留用于下一次调用(为每次调用创建一个新的instad)
当使用tcpdump观察实际发生的事情时,我看到的是在发送NFSPROC3_GETATTR之后(包含所有正确的信息),60微秒后客户端发送TCP [FIN,ACK]消息。
什么可以导致连接这样做? 我已经尝试了查看clnt_calls和Authenticator保持不变之间的变化,并且所有信息保持不变,但可能长时间不活动会导致服务器失去连接,只能通过创建新客户端来解决。
答案 0 :(得分:0)
客户端在失败clnt_call后发送FIN的原因是因为他被扔到clnt_destroy并重新创建以再次尝试
我首先得到错误的原因是因为在6分钟的空闲时间之后+服务器将FIN发送给客户端并且他确认回来了,但仍然表现为连接处于活动状态 - 让我们留下half open tcp连接
因此,在尝试发送消息时,我收到了RPC错误 - 无法接收 - 因为没有人在另一边收听(服务器已经断开连接)