在什么情况下发出QAbstractSocket :: TemporaryError信号?

时间:2019-01-19 17:59:36

标签: qt sockets tcp blocking

因此,我正在用C ++实现一个远程实时控制系统,并决定为GUI端选择QT(这是我的新手)。我的系统中有多台计算机,基本上,我的GUI将通过TCP / IP连接控制我编写并在其他计算机上运行的程序。

我正经过QT documentation for socket errors that can be signaled/emitted,但我听不懂TemporaryError

QAbstractSocket::TemporaryError -> A temporary error occurred (e.g., operation would block and socket is non-blocking).

据我了解,QT套接字是非阻塞的,并且可以使用waitForConnected() , waitForReadyRead(), waitForBytesWritten(), waitForDiscconected()进行阻塞操作。当然,在使用这些阻塞操作时,它不会发出这样的错误,因为这不是错误,只是程序员选择阻塞。

我认为也许当OS缓冲区已满并且必须向套接字写入更多数据时,它可能会阻塞并且一个人会发出TemporaryError。因此,我试图通过使接收器完全不接收并且发送器向套接字写入和刷新,然后返回到事件循环,以及在定时器超时时重写和刷新等等来激发这种情况。

我看到一段时间后OS缓冲区已满,但现在QAbstractSocket or QIODevice的内部缓冲区可以存储数据(可以由QIODevice::bytesToWrite()检查:它在前8个返回0。其余尝试之后,将开始累积10次写尝试。并且再次没有TemporaryError

对我来说,处理所有可能的套接字错误很重要,现在我不知道如何处理这个错误,因为我根本不知道它是怎么产生的。有人有主意吗?

0 个答案:

没有答案