roy at panix.com
Sat Nov 23 03:15:10 CET 2013
In article <b8d42424-e0ab-4595-9c87-25e5c1b53349 at googlegroups.com>,
Bhanu Karthik <bhanukarthik2002 at gmail.com> wrote:
> please help me.. what does the following line do?
> read_sockets,write_sockets,error_sockets =
This is a little tricky.
First,read the docs at http://docs.python.org/2/library/select.html.
There's a lot of complicated stuff there, but just concentrate on the
description of the select.select() call for now.
Imagine a process which has a lot of network connections open. A great
example would be something like a MUD (Multi User Dungeon). You've got
one server process(*) and a bunch of clients which have all made TCP
connections over individual sockets.
Each client will be sending commands asynchronously, and the server
needs to handle this. You need some way to figure out which of those
sockets have something that's been sent to you (which you need to
process) and which are just sitting idle. That's where select() comes
in. It gives you a way to say, "Here's a list of sockets. Sleep until
one of them has something available for me to read, and let me know
One bit of complication is that you can also check for sockets which are
ready to be written on, and sockets which have some sort of error
condition. That's why the call returns a 3-tuple. But, for now, let's
just concentrate on reading.
Here's a very simplistic server which uses select():
sock = socket.socket()
# Accept four connections.
connections = 
for i in range(4):
s, addr = sock.accept()
print "Got connection from %s" % str(addr)
readable, _, _ = select.select(connections, , )
print "ready for reading: %s" % readable
for s in readable:
data = s.recv(1024)
print "Read from %s: %s" % (s, data)
You can write a little client which connects to this (I've got one I
used for testing, but I'll leave it to you to write one yourself as an
exercise). Connect four clients, and have them send some input in
Actually, this server has a bug (which you'll discover as soon as you
close one of the four connection), but it should serve to illustrate the
(*) I'm not sure if real MUDs are programmed this way, but it's a
plausible architecture. For simplicity sake, I'm assuming a
More information about the Python-list