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