gpt4 book ai didi

qt - QTcpSocket::waitForBytesWritten 的行为?

转载 作者:可可西里 更新时间:2023-11-01 02:30:32 25 4
gpt4 key购买 nike

我对 QTcpSocket::waitForBytesWritten() 的行为有点困惑...

这个函数会阻塞到什么时候?

  • 直到数据写入操作系统的内部缓冲区以通过 TCP 传输?
  • 直到数据被物理转换为 TCP 数据包并发送?
  • 直到全部数据传输完毕并且远程客户端确认已收到所有数据包?

看了文档,好像不是很清楚。

最佳答案

一般来说,操作系统只为第一个问题提供简单的 API - 因为 Qt 是一个可移植的 API,所以最好只依赖它来指代到操作系统缓冲区的传输。如果您需要实际的收据确认,最好由远程应用程序发送它 - 毕竟,远程应用程序可以确认数据,但永远不会从远程操作系统的读取缓冲区中读取数据。

如果您需要避免远程端永远阻止您,您应该等待 QIODevice::bytesWritten发出信号并返回事件循环做其他工作,或者简单地设置一个适当的超时时间。一般来说,远程端总是可以在某种程度上阻止你——也就是说,它可以拒绝确认,填满你的本地操作系统缓冲区,此时写入不会从 Qt 到操作系统;无论 waitForBytesWritten() 处于什么级别,它始终可以被阻止。

因此,bytesWrittenwaitForBytesWritten() 应该只用于限制数据源 - 即,如果您要进入一个通过 1G 的紧密循环一次将大量数据发送到套接字,您可能最终会在进程中缓冲它并耗尽内存。通过使用 bytesWritten 信号触发额外的读/写,您可以避免这个问题。

关于qt - QTcpSocket::waitForBytesWritten 的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4653980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com