当前位置:  开发笔记 > 运维 > 正文

如何获取套接字的非ACK TCP数据量?

如何解决《如何获取套接字的非ACKTCP数据量?》经验,为你挑选了1个好方法。

Linux在man-page tcp(7)中描述了ioctl SIOCOUTQ,它返回套接字缓冲区中未发送数据的数量.如果我理解内核代码正确,则所有非ACK数据都被计为"未发送".ioctl至少从2.4.x开始可用.

{Free,Net,Open,*} BSD,Solaris,Windows有什么相似之处吗?



1> Nathaniel J...:

您可能需要(至少)两条不同的信息:尚未发送的数据量,以及已发送但未确认的数据量.

在Linux上:SIOCOUTQ记录为提供未发送数据的数量,但实际上给出了(未发送数据+发送但未确认数据)的总和.一个最近的补丁(2月2016)使人们有可能从一开始实际未发送的数据tcpi_notsent_bytes在外地TCP_INFO结构.

在macOS和iOS上:getsockopt(fd, SOL_SOCKET, SO_NWRITE, ...)就像SIOCOUTQ:它记录了提供未发送数据的数量,但实际上给出了(未发送的数据+发送但未确认的数据)的总和.我不知道如何获得更细粒度的信息.

在Windows上:GetPerTcpConnectionEStats使用该TcpConnectionEstatsSendBuff选项可以将未发送的数据和已发送但未确认的数据作为两个单独的数字.

我不知道如何在其他操作系统上获取此信息.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有