【发布时间】:2015-03-12 07:23:35
【问题描述】:
假设我有一个 TCP 客户端和一个 TCP 服务器。首先,客户端向服务器发送了一些数据,但是服务器正忙于做其他事情,所以它没有读取这个连接。数据保存在服务器主机的 TCP 接收缓冲区中。在这一点上,请帮助我澄清在以下不同情况下会发生什么:
- 在服务器调用读取之前,客户端在此连接上调用
close。而FIN已经到达服务器TCP,服务器TCP已经发送ACK。此时,如果服务器在这个socket上调用read,会返回什么?它是否返回 TCP 接收缓冲区中的未读数据?还是只是返回0表示EOF,未读数据被丢弃? - 在服务器调用
read之前,客户端在此连接上使用SHUT_WR调用shutdown。而FIN已经到达服务器TCP,服务器TCP已经发送ACK。此时,如果服务器在这个socket上调用read,会返回什么?它是否返回 TCP 接收缓冲区中的未读数据?还是只是返回0表示EOF,未读数据被丢弃? - 在服务器调用
read之前,客户端直接退出而不调用close或shutdown。并且客户端主机中的TCP会发送FIN,这个FIN已经到达服务器TCP,服务器TCP已经发送ACK。此时,如果服务器在这个socket上调用read,会返回什么?它是否返回 TCP 接收缓冲区中的未读数据?还是只是返回0表示EOF,未读数据被丢弃?
【问题讨论】:
标签: sockets networking tcp shutdown