我正在开发一个服务器应用程序,需要向客户端发送大量数据。然而,客户端可能随时断开连接,在这种情况下,套接字上的send()/write()将返回错误。我想检查在客户端断开连接之前实际传递了多少数据,以便能够在客户端重新连接时继续从离开的地方发送数据。使用套接字API是否有可能进行检查?
不,套接字API无法提供此信息。实际上,通常无法知道这一点。根据连接失败的具体方式,一侧的TCP堆栈通常无法知道成功传输到另一侧的数据量。它唯一能知道的是已确认的数据量,这不是同一件事。考虑到除TCP/IP之外的其他东西可能会失败(本地操作系统、远程操作系统、远程进程、远程应用程序逻辑),在TCP级别上已确认的数据量可能并没有太大意义。您需要使用端到端应用程序协议,以使远程端确认其已接收和成功处理的数据(如果适用,则提交)。