RPC clnt_call立即发送tcp [FIN,ACK]

时间:2015-08-18 07:14:07

标签: sockets tcp client rpc nfs

我在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)

  • 我仍然没有意识到它是什么触发器,但偶尔我收到一条消息“RPC:无法接收”,然后是客户端的破坏并创建一个新的重传客户端 - 这总是有效的。 / LI>
  • 当使用tcpdump观察实际发生的事情时,我看到的是在发送NFSPROC3_GETATTR之后(包含所有正确的信息),60微秒后客户端发送TCP [FIN,ACK]消息。

    • 也许tcp dump在中间丢弃了一些数据包(但我对此表示怀疑)

什么可以导致连接这样做? 我已经尝试了查看clnt_calls和Authenticator保持不变之间的变化,并且所有信息保持不变,但可能长时间不活动会导致服务器失去连接,只能通过创建新客户端来解决。

1 个答案:

答案 0 :(得分:0)

客户端在失败clnt_call后发送FIN的原因是因为他被扔到clnt_destroy并重新创建以再次尝试

我首先得到错误的原因是因为在6分钟的空闲时间之后+服务器将FIN发送给客户端并且他确认回来了,但仍然表现为连接处于活动状态 - 让我们留下half open tcp连接

因此,在尝试发送消息时,我收到了RPC错误 - 无法接收 - 因为没有人在另一边收听(服务器已经断开连接)