TCP发送队列深度

TCP发送队列深度,tcp,network-programming,Tcp,Network Programming,如何发现有多少字节已发送到TCP套接字,但尚未连接 请看下面的图表: 我想知道第2类、第3类和第4类的总数,或者第3类和第4类的总数。这是在C++中以及Windows和Linux上实现的。理想情况下,我可以使用ioctl,但似乎没有 某些Unix版本可能有一种API方法来实现这一点,但是没有一种方法可以跨不同的变体进行移植。在Linux下,请参阅tcp手册页(7) 似乎可以通过ioctl(sock,SIOCINQ TCP_INFO getsockopt()调用返回的结构成员可能会提供其他统计信

如何发现有多少字节已发送到TCP套接字,但尚未连接

请看下面的图表:


我想知道第2类、第3类和第4类的总数,或者第3类和第4类的总数。这是在C++中以及Windows和Linux上实现的。理想情况下,我可以使用ioctl,但似乎没有

某些Unix版本可能有一种API方法来实现这一点,但是没有一种方法可以跨不同的变体进行移植。

在Linux下,请参阅tcp手册页(7)

似乎可以通过ioctl(sock,SIOCINQ


TCP_INFO getsockopt()调用返回的结构成员可能会提供其他统计信息。

如果要确定是否添加数据:别担心,send将一直阻止,直到数据进入队列。如果不想阻止,可以告诉它发送(2):

但这只适用于Linux

您还可以将套接字设置为非阻塞:

fcntl(socket, F_SETFD, O_NONBLOCK);

这种写入方式将返回一个错误(EAGAIN)如果无法将数据写入流。

您想完成什么?如果知道当前问题,也许有人可以提供帮助。我正在尝试确定是向队列添加更多数据还是合并更新。由于传入数据速率远高于传出数据速率,我很容易使缓冲区和网络溢出。但是,我会以牺牲用户体验为代价保留一些更新。
fcntl(socket, F_SETFD, O_NONBLOCK);