我正在开发用 C 语言为 Linux 编写的客户端服务器应用程序,我正在使用 TCP 将数据复制到多个从属副本,我想知道如何处理某些副本的意外临时关闭(可能是 unix 进程的崩溃)或硬件电源关闭)。
当我向内核发出 write() 系统调用时,成功返回意味着数据已复制到套接字,但并不意味着接收端得到了数据。如果目标断电然后再上电,则必须从丢失数据的点将数据重新发送(在建立新的 TCP 连接之后)到副本。
假设我正在处理大量数据并且我不保留我已经发送的数据(即 write() 系统调用返回成功)。我只保留待发送的数据。
当副本从意外关闭中恢复并再次连接时,我如何从内核获取已写入套接字但在目标主机上尚未“确认”的数据?
或者换句话说,我如何从 TCP 连接丢失中恢复并从停止点重新建立客户端和服务器之间的传输?