Basic client/server with sockets

Steve Holden sholden at
Tue Feb 11 05:24:40 CET 2003

"Andrew Bennetts" <andrew-pythonlist at> wrote in message
news:mailman.1044927282.26166.python-list at
> On Tue, Feb 11, 2003 at 01:27:11AM +0100, Irmen de Jong wrote:
> > Andrew Bennetts wrote:
> > >On Mon, Feb 10, 2003 at 02:10:35PM -0800, Natan wrote:
> > >
> > >>I'm new to python ans i have a script like this:
> > >
> > >
> > >I recommend writing your server using Twisted
<> --
> > >it will take care of problems like this for you, leaving you to worry
> > >the logic of your protocol, rather than the details of the socket API.
> >
> > When using Pyro ( you don't even
> > have to worry about the protocol ;-)
> Well, ditto with Twisted ;)
> It not only implements many common protocols for you (HTTP, POP, SMTP,
> FTP, ...), it has its own remote object protocol (Perspective Broker) :)
> I strongly recommend taking a look, if you haven't already.

How quickly this thread got off-topic! I might equally well suggest that
everybody buys "Python Web Programming" to help them build their systems,
but that doesn't answer the question ...

The real answer is quite simple, however: the protocol deadlocks in the face
of zero-length data. Suppose you just hit return to the client: the "input"
variable (not a terribly good name, by the way, since it's also the name of
a built-in function) receives a zero-length string. So the "s.send(input)"
sends zero bytes - easily done, you don't actually need a network interface
for that :-).

Unfortunately, the server doesn't receive anything - hardly surprising,
since the client just explicitly didn't send anything. So now you have a
server that's still waiting for the client to send it something, and a
client that won't send anything else until it receives back the empty string
it just sent (not) to the server. Result: deadlock.

Steve Holden                        
Python Web Programming       
Register for PyCon now!  

More information about the Python-list mailing list