How to disable connection timer in QTcpSocket
-
Hello.
QTcpSocket creates timer to handle connection timeout. I tried to use thousands of sockets (not a typicall use case, but anyway) and got this error messages:QEventDispatcherWin32::registerTimer: Failed to create a timer (The current process has used all of its system allowance of handles for Window Manager objects.)I think creating timer for every socket is huge wast of system resources when you use many sockets. I can handle timeouts manually using just one single timer. But I didn't find any option to disable built-in socket connection timer. How can do it?
My environment: Qt 5.4, 5.5.1, Windows 8.1, Visual Studio 2013
-
Hi,
AFAIK, there's none, you should have to modify QAbtractSocket and build your own version of Qt for that.
But use a single timeout for so many sockets ? Sounds strange.
Out of curiosity, why do you need so many sockets ?
-
Hi,
AFAIK, there's none, you should have to modify QAbtractSocket and build your own version of Qt for that.
But use a single timeout for so many sockets ? Sounds strange.
Out of curiosity, why do you need so many sockets ?
you should have to modify QAbtractSocket
Seems like you right. The code in 'qabstractsocket.cpp':
<...skipped...> // Start the connect timer. if (threadData->hasEventDispatcher()) { if (!connectTimer) { connectTimer = new QTimer(q); QObject::connect(connectTimer, SIGNAL(timeout()), q, SLOT(_q_abortConnectionAttempt()), Qt::DirectConnection); } connectTimer->start(QT_CONNECT_TIMEOUT); } <...skipped...>And there are no options to disable it. But I think it will be easy to patch it to make it work without connectTimer.
But use a single timeout for thought of sockets ? Sounds strange.
What else can I do to avoid handles exhaustion? I don't see any other options.
Out of curiosity, why do you need so many sockets ?
Just testing Qt abilities and limitations in this particular area.