【发布时间】:2014-06-08 21:36:33
【问题描述】:
我在我的 c++ 代码中使用基于 http 的文件上传(在 linux/android 上运行)。我使用异步 tcp 套接字来写入文件数据。我的问题是我的进度条反映了已写入套接字的内容,而不是实际发送的内容。对于慢速链接,问题变得很明显,在 100% 发送进度通知和发送完整消息之间需要数十秒(有时超过一分钟)。
我不修改 SO_SNDBUF,在我的情况下它是 35KB(由 getsockopt 查询)。如何修复进度通知以正确反映当前传输状态?有没有办法查询仍然保留在缓冲区中的数据大小?有没有办法获取有关传输进度的 TCP 通知(由远程套接字确认)?
【问题讨论】:
-
您是否考虑过使用诸如libcurl 之类的HTTP 客户端库?如果不是,为什么?
-
@BasileStarynkevitch 它是包含所有代码等等的大型代码库的一部分。采用其他所有完成这项工作的库是不切实际的
-
是否可以从代码中使用 netstat 实用程序并查看 SO_SNDBUF 是如何被填充的?如果内容字节不断增加,您的传输率就会受到影响。只是一个想法。
标签: c++ linux asynchronous tcp asyncfileupload