2016-03-03 84 views
0

我想了解一些关于TCP /网络的基础知识。终止连接TCP

比方说,我有客户端发送HTTP请求到服务器通过快速连接下载大文件。

curl http://downloadfile > file 

服务器将大文件写入套接字。如果服务器崩溃/死亡,即使服务器刚刚死亡,客户端是否仍然可以继续接收文件?

换句话说,在客户端在socket上获取数据之前,客户端如何知道连接已经终止?

我猜测一旦没有新的数据在套接字上就会超时,但是在客户端收到所有数据之前整个文件是否可以传输到套接字上呢?

回答

0

即使服务器刚刚死亡,客户端是否可以继续接收文件?

当然不是。它可以读取套接字接收缓冲区中的任何内容以及任何正在传输的数据,就是这样。

换句话说,在客户端在socket上获取数据之前,客户端如何知道连接已经终止?

它可能不知道。它可能永远坐在那里read()。除非它有读取超时。

我猜想,这一次将没有新的数据套接字

上超时,当且仅当客户端已设置读超时。

但是,在客户端收到所有数据之前,整个文件是否可以传输到套接字上?

还有服务器。有服务器的套接字发送缓冲区。如果服务器崩溃,则两者都不存在争用。有客户端的套接字接收缓冲区,但这在逻辑上是客户端的一部分:它保存已到达但尚未被应用程序读取的数据。它的规模有限。

+0

所以我有一个客户端和服务器之间的连接,我关闭了服务器和客户端正在下载的文件继续下载几分钟更多 - 这将是什么解释?客户端套接字接收缓冲区中是否仍有尚未被应用程序读取的数据? – K2xL