Please advise how can I setup default connection timeout without using blocking waitForConnected() method? I noticed that socket emit error signal (QAbstractSocket::SocketTimeoutError) after about 60 seconds that I can handle as a timeout, but can this timeout be adjusted?
Qt: default connection timeout for QTcpSocket
Asked Answered
Hi, I don't think there is other solution. You can adjust waitForConnected() but if you don't want this function to be blocking (probably because of GUI or anything), you should use a thread. –
Thermion
Exactly, because of GUI blocking. I want to have persistent connection for the socket, but I don't know how to do it with threads. If I just move to thread waitForConnected() call, it shows me an output in console 'Cannot create children for a parent that is in a different Thread', but there is no any explicit object creation, just singe waitForConnected. –
Gluttony
You could use a QTimer
:
- Start it after you have called
connectToHost
. - You may want to reset the timer when socket state changes from
QAbstractSocket::HostLookupState
toQAbstractSocket::ConnectingState
, perhaps with different timeout, if you want more fine-grained control on when exactly will the timeout happen. - If you get connection, stop the timer, or reset it for similar send/receive timeout use.
- If you get timer timeout, do
disconnectFromHost()
and possibly do something like retry when you get disconnect signal.
When developing, make sure to connect the stateChanged(...)
and error(...)
signals at least to debug slots, which just print the arguments. That way you will see when something happens in a way you did not expect.
yes, now I implemented it like this with startTimer() of QObject. So I can accept this answer for now. –
Gluttony
© 2022 - 2024 — McMap. All rights reserved.