簡體   English   中英

發送數據時異步tcp套接字和進度

[英]async tcp socket and progress when sending data

我在我的C ++代碼中使用基於http的文件上傳(在linux / android上運行)。 我使用異步tcp套接字寫入文件數據。 我的問題是,進度條反映的是寫入套接字的內容,而不是實際發送到網絡上的內容。 對於慢速鏈接,問題變得很明顯,在100%發送進度通知和發送完整消息之間需要數十秒(有時是一分鍾)。

我不修改SO_SNDBUF,在我的情況下為35KB(由getsockopt查詢)。 如何修復進度通知以正確反映當前傳輸狀態? 有沒有辦法查詢仍然保留在緩沖區中的數據大小? 有沒有一種方法可以獲取有關傳輸進度的TCP通知(由遠程套接字確認)?

您將無法知道此緩沖區的當前大小,因為它位於內核區域中,並且沒有已知的/已記錄的ioctl來告知其大小。 即使您知道它,它也不是便攜式的,因此我認為這不是解決此問題的好方法。

您可以:

  • 估算整個傳輸期間的數據速率,以便最后計算此SO_SNDBUF緩沖區的剩余時間

  • 使用第三方庫,其中將包括先前的計算!

編輯:在對《 TCP/IP Architecture, Design & Implementation in Linux中的TCP/IP Architecture, Design & Implementation in Linux 》一書進行了研究之后,我已經看到了用於TCP套接字監視的NETLINK_TCPDIAG選項。 Netlink套接字是內核和用戶域之間的IPC方法。 不幸的是,對於NETLINK_TCPDIAG選項,沒有詳細信息……我只知道您必須創建一個這樣的套接字: int fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_TCPDIAG)和原始套接字創建需要root特權。

之后,您唯一的朋友似乎是linux/net/ipv4/tcp_diag.chttp://www.cs.fsu.edu/~baker/devices/lxr/http/ident?v=2.6.11.8;i= NETLINK_TCPDIAG )... Google上沒有關於這種協議的任何信息...祝您好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM