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