我正在尝试了解有关TCP /网络的一些基本原理。
假设我有客户端向服务器发送HTTP请求以通过快速连接下载大文件。
curl http://downloadfile > file
服务器将大文件写入套接字。如果服务器崩溃/死亡,即使服务器刚刚死亡,客户端是否有可能继续接收文件?
换句话说,在完成在套接字上获取数据之前,客户端如何知道连接已被终止?
我猜想一旦套接字上没有新数据就会超时,但是在客户端收到所有数据之前是否可以将整个文件传输到套接字上?
答案 0 :(得分:0)
即使服务器刚刚死亡,客户端仍然可以继续接收文件吗?
当然不是。它可以读取其套接字接收缓冲区中的任何内容以及正在传输的任何数据,就是这样。
换句话说,在完成在套接字上获取数据之前,客户端如何知道连接已被终止?
它可能不知道。它可能只是永远地坐在read()
。除非它有读取超时。
我猜想一旦套接字上没有新数据就会超时
当且仅当客户端设置了读取超时时间。
但是在客户端收到所有数据之前是否可以将整个文件传输到套接字上?
有服务器。有服务器的套接字发送缓冲区。如果服务器崩溃,两者都没有争用。有客户端的套接字接收缓冲区,但这在逻辑上是客户端的一部分:它保存已到达但尚未被应用程序读取的数据。它的大小有限。