Newbie question: how to keep a socket listening?
Jp Calderone
exarkun at divmod.com
Fri Jun 24 21:30:49 EDT 2005
On Fri, 24 Jun 2005 21:21:34 -0400, Peter Hansen <peter at engcorp.com> wrote:
>ncf wrote:
>> Heh, like I said. I was not at all sure. :P
>>
>> Nevertheless, could this be the problem? =\
>
>You *may* correct, mainly because the OP's code doesn't appear to spawn
>off new threads to handle the client connections, which means he can
>handle only one connection at a time. Specifically, while he is talking
>to one client he is not also in an accept() call on the server socket,
>which means there will be (because of the listen(1) call) only a single
>pending connection allowed in the backlog.
>
>I haven't attempted a thorough analysis... just this much, trying to see
>whether it is obvious that the listen(1) is at fault -- and it's not
>obvious. I thought this response might clarify the meaning of listen(1)
>a little bit for some folks nevertheless.
The argument to listen() is only a _hint_ to the TCP/IP stack. Linux, at least, will not create a buffer large enough for only a single connection. You can test this easily: create a socket, bind it to an address, call listen(1) on it, and *don't* call accept(). Telnet (or connect somehow) repeatedly, until your connection is not accepted. On my system (Linux 2.6.10), I can connect successfully 8 times before the behavior changes.
Jp
More information about the Python-list
mailing list