TCP发送队列深度

时间:2008-09-19 21:14:54

标签: tcp network-programming

如何发现已向TCP套接字发送了多少字节,但尚未将其放在网上?

查看此处的图表:

我想知道类别2,3和4的总数或总共3和4.这是在C(++)以及Windows和Linux上。理想情况下,我可以使用ioctl,但似乎没有。

3 个答案:

答案 0 :(得分:3)

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

看来你可以通过ioctl获取未传输的字节数(sock,SIOCINQ ......

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

答案 1 :(得分:0)

有些Unix版本可能有API方法可以做到这一点,但没有办法可以在不同版本中移植它。

答案 2 :(得分:0)

如果您想确定是否要添加数据:不用担心,发送将阻塞,直到数据在队列中。如果你不想阻止它,你可以告诉它发送(2):

send(socket, buf, buflen, MSG_DONTWAIT);

但这仅适用于Linux。

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

fcntl(socket, F_SETFD, O_NONBLOCK);

如果无法将数据写入流中,写入将返回错误(EAGAIN)。