[Interest] QTcpServer stop accepting connections
Benjamin Zeller
zeller.benjamin at web.de
Thu Sep 5 14:27:22 CEST 2013
On 05.09.2013 14:09, Etienne Sandré-Chardonnal wrote:
> Hi,
>
> Did you see this in the doc?:
> *Note:*The returnedQTcpSocketobject cannot be used from another thread.
> If you want to use an incoming connection from another thread, you need
> to overrideincomingConnection().
In fact we did override incomingConnection().
Creating the QTcpSocket manually. But maybe QTcpSockets can not be
moved between threads?
This is a opensource project so:
incoming connection are not queued:
https://github.com/bzeller/tufao/blob/master/src/priv/tcpserverwrapper.cpp#L28
socket is created here (without a parent):
https://github.com/bzeller/tufao/blob/master/src/httpserver.cpp#L81
https://github.com/bzeller/tufao/blob/master/src/httpserver.cpp#L100
pushed to the thread:
https://github.com/bzeller/tufao/blob/master/src/priv/workerthread.cpp#L56
I know moving the socket descriptor would be better but the design of
the library does not really fit that approach.
>
> (From Qt 4.8.1)
>
>
> 2013/9/5 Benjamin Zeller <zeller.benjamin at web.de
> <mailto:zeller.benjamin at web.de>>
>
> Hello again,
>
> ok after digging some more its clear that the E_AGAIN or E_WOULDBLOCK
> error means that there are no connections available to open. That makes
> no sense because i opened 20 connections in a row, but only the
> first 6 are handled and then the following 6 and so on.
>
> What could possibly delay the notification of new incoming connecions
> until another one is handled?
>
> On 05.09.2013 13:04, Benjamin Zeller wrote:
> > Hello,
> >
> > not sure if i just ran into a bug or if i do something wrong:
> >
> > Basically i have a QTcpServer accepting connections, after a
> connection
> > comes in a QTcpSocket is created and pushed to a workerthread to
> handle
> > it (moveToThread).
> >
> > But after 6 connections the QTcpServer stops accepting connections
> > (seems to be releated to receiving a EAGAIN error) until the first 6
> > are served (but i openend 20 connections at once from my testcode).
> >
> > Then it continues with the next 6 and i'm pretty sure the mainloop is
> > not blocked, because when i pause with the debugger its always
> waiting
> > inside exec().
> >
> > This happens on Linux, i did not test yet with other operating
> systems.
> >
> > Anyone ran into something similar?
> >
> > _______________________________________________
> > Interest mailing list
> > Interest at qt-project.org <mailto:Interest at qt-project.org>
> > http://lists.qt-project.org/mailman/listinfo/interest
> >
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org <mailto:Interest at qt-project.org>
> http://lists.qt-project.org/mailman/listinfo/interest
>
>
>
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
More information about the Interest
mailing list