假设我有一个TCP客户端和一个TCP服务器。首先,客户端向服务器发送一些数据,但是服务器正在忙于其他事情,因此它没有读取此连接。数据保留在服务器主机上的TCP接收缓冲区中。此时,请帮我澄清以下不同情况下会发生什么:
- 在服务器调用read之前,客户端在此连接上调用close。并且FIN已到达服务器TCP,并且服务器TCP已发送ACK。此时,如果服务器在此套接字上调用read,它会返回什么?它会返回TCP接收缓冲区中未读取的数据吗?还是只返回0以表示EOF,并且未读取的数据被丢弃?
- 在服务器调用read之前,客户端使用SHUT_WR调用shutdown关闭此连接。并且FIN已到达服务器TCP,并且服务器TCP已发送ACK。此时,如果服务器在此套接字上调用read,它会返回什么?它会返回TCP接收缓冲区中未读取的数据吗?还是只返回0以表示EOF,并且未读取的数据被丢弃?
- 在服务器调用read之前,客户端只是退出而没有调用close或shutdown。并且客户端主机中的TCP将发送FIN,这个FIN已到达服务器TCP,并且服务器TCP已发送ACK。此时,如果服务器在此套接字上调用read,它会返回什么?它会返回TCP接收缓冲区中未读取的数据吗?还是只返回0以表示EOF,并且未读取的数据被丢弃?