TCP发送队列深度
时间:2020-03-06 14:27:53 来源:igfitidea点击:
我如何发现已将多少字节发送到TCP套接字但尚未放入网络中?
在这里查看该图:
<IMG SRC =" http://www.tcpipguide.com/free/diagrams/tcpswpointers.png">
我想知道类别2、3和4的总数或者3和4的总数。这是在C(++)中以及在Windows和Linux上。理想情况下,我可以使用一个ioctl,但似乎没有。
解决方案
某些Unix风格可能有API方式来做到这一点,但是没有办法可以移植到不同的变体中。
在Linux下,请参见tcp(7)的手册页。
看来我们可以通过ioctl(sock,SIOCINQ ...
通过TCP_INFO getsockopt()调用返回的结构成员可能还可以获得其他统计信息。
如果我们想确定是否要添加数据:请放心,发送将一直阻塞,直到数据在队列中为止。如果我们不想阻止它,可以告诉它发送(2):
send(socket, buf, buflen, MSG_DONTWAIT);
但这仅适用于Linux。
我们还可以将套接字设置为非阻塞:
fcntl(socket, F_SETFD, O_NONBLOCK);
如果无法将数据写入流,则这种写操作将返回错误(EAGAIN)。

