1

我如何发现有多少字节已发送到 TCP 套接字但尚未在线上?

看这里的图表: http://www.tcpipguide.com/free/diagrams/tcpswpointers.png

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

4

3 回答 3

3

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

看来您可以通过 ioctl(sock,SIOCINQ ...

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

于 2008-09-19T21:28:50.187 回答
0

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

send(socket, buf, buflen, MSG_DONTWAIT);

但这仅适用于 Linux。

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

fcntl(socket, F_SETFD, O_NONBLOCK);

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

于 2008-09-19T21:36:31.117 回答
0

一些 Unix 风格可能有一个 API 方法来做到这一点,但没有办法做到这一点,可以跨不同的变体移植。

于 2008-09-19T21:17:33.147 回答