我如何发现有多少字节已发送到 TCP 套接字但尚未在线上?
我想知道类别 2、3 和 4 的总数或 3 和 4 的总数。这是在 C(++) 和 Windows 和 Linux 上。理想情况下,我可以使用一个 ioctl,但似乎没有。
我如何发现有多少字节已发送到 TCP 套接字但尚未在线上?
我想知道类别 2、3 和 4 的总数或 3 和 4 的总数。这是在 C(++) 和 Windows 和 Linux 上。理想情况下,我可以使用一个 ioctl,但似乎没有。
在 Linux 下,请参见 tcp(7) 的手册页。
看来您可以通过 ioctl(sock,SIOCINQ ...
TCP_INFO getsockopt() 调用返回的结构成员可能会提供其他统计信息。
如果你想确定是否添加数据:别担心,send 会阻塞,直到数据在队列中。如果你不想让它阻塞,你可以告诉它发送(2):
send(socket, buf, buflen, MSG_DONTWAIT);
但这仅适用于 Linux。
您还可以将套接字设置为非阻塞:
fcntl(socket, F_SETFD, O_NONBLOCK);
如果无法将数据写入流,这种方式 write 将返回错误(EAGAIN)。
一些 Unix 风格可能有一个 API 方法来做到这一点,但没有办法做到这一点,可以跨不同的变体移植。