QTcpSocket :: waitForBytesWritten的行为?

我对
QTcpSocket::waitForBytesWritten()
的行为有点困惑...... 直到这个功能什么时候阻止? 在将数据写入OS的内部缓冲区以通过TCP传输之前? 直到数据物理转换为TCP数据包并发送? 在传输整个数据并且远程客户端确认已收到所有数据包之前? 我查看了文档,但似乎并不十分清楚。     
已邀请:
一般来说,操作系统只为第一个问题提供简单的API - 因为Qt是一个可移植的API,最好只依赖它来指向传输到操作系统的缓冲区。如果您需要实际的接收确认,最好由远程应用程序发送 - 毕竟,数据可以被远程控制,但永远不会读取远程的OS读取缓冲区。 如果您需要避免让远程端永久阻止您,则应该等待
QIODevice::bytesWritten
信号并返回事件循环以执行其他工作,或者只是设置适当的超时。一般情况下,远程端总是可以在某种程度上阻止你 - 也就是说,它可以拒绝ack,填满你的本地OS缓冲区,此时写入不会从Qt到OS;无论
waitForBytesWritten()
处于何种水平,它都可以被阻止。 因此,
bytesWritten
waitForBytesWritten()
应仅用于限制数据源 - 即,如果您要进入一个紧密的循环,一次将1G数据传递到套接字,您可能最终在此过程中缓冲它内存耗尽。通过使用
bytesWritten
信号触发额外的读/写操作,可以避免此问题。     

要回复问题请先登录注册