#################################################################
# Server: handle multiple clients in parallel with select.
# use the select module to multiplex among a set of sockets:
# main sockets which accept new client connections, and 
# input sockets connected to accepted clients; the select
# call can either poll or wait for a set of input and output
# streams to be ready for reading and writing (and exceptions), 
# such that socket calls like accept and recv will not block;
# it works only on sockets under Windows, but also on things 
# like pipes on Unix anc Macs.  select is an alternative to 
# spawning threads and processes and provides good performance 
# for short transactions (but is still open to blocking in some 
# cases; also see asyncore.py in the Python standard library: a
# class based callback model dispatched by a select event loop;
# select takes 3 lists of selectable objects (input, output, 
# exceptions), plus a timeout; timeout may be a wait expiration
# in seconds, zero to mean poll and return immediately, or 
# ommitted to mean wait until at least one object is ready; 
# returns triple of ready objects--a subset of 1st 3 args,
# any or all of which may be empty if timeout expired; note
# that a time.sleep call to simulate long-running task doesn't
# make sense here--all clients handled on same, single loop; 
#################################################################

ALSO: MAKING SOCKETS NON-BLOCKING:

setblocking (flag) 
  Set blocking or non-blocking mode of the socket: if flag is 0, the 
  socket is set to non-blocking, else to blocking mode. Initially all 
  sockets are in blocking mode. In non-blocking mode, if a recv() call 
  doesn't find any data, or if a send call can't immediately dispose of
  the data, a error exception is raised; in blocking mode, the calls 
  block until they can proceed. 


--------------------------------------------------------------------------

[client window 1]
C:\PP2ndEd\examples\Part2\Internet\Sockets>python echo-client.py
Client received: 'Echo=>Hello network world at Sun Aug 13 22:52:01 2000'

C:\PP2ndEd\examples\Part2\Internet\Sockets>python echo-client.py
Client received: 'Echo=>Hello network world at Sun Aug 13 22:52:03 2000'


[client window 2]
C:\PP2ndEd\examples\Part2\Internet\Sockets>python echo-client-50008.py localhost
 Bigus Dikkus
Client received: 'Echo=>Bigus at Sun Aug 13 22:52:57 2000'
Client received: 'Echo=>Dikkus at Sun Aug 13 22:52:57 2000'

C:\PP2ndEd\examples\Part2\Internet\Sockets>python testecho.py
...




[server window]
C:\PP2ndEd\examples\Part2\Internet\Sockets>python select-server.py
select-server loop starting
Connect: ('127.0.0.1', 1175) 7965520
        got Hello network world on 7965520
        got  on 7965520
Connect: ('127.0.0.1', 1176) 7964288
        got Hello network world on 7964288
        got  on 7964288
Connect: ('127.0.0.1', 1177) 7963920
        got Bigus on 7963920
        got Dikkus on 7963920
        got  on 7963920
---
Connect: ('127.0.0.1', 1178) 7965216
        got Hello network world on 7965216
        got  on 7965216
Connect: ('127.0.0.1', 1179) 7963968
Connect: ('127.0.0.1', 1180) 7965424
        got Hello network world on 7963968
Connect: ('127.0.0.1', 1181) 7962976
        got Hello network world on 7965424
        got  on 7963968
        got Hello network world on 7962976
        got  on 7965424
        got  on 7962976
Connect: ('127.0.0.1', 1182) 7963648
        got Hello network world on 7963648
        got  on 7963648
Connect: ('127.0.0.1', 1183) 7966640
        got Hello network world on 7966640
        got  on 7966640
Connect: ('127.0.0.1', 1184) 7966496
        got Hello network world on 7966496
        got  on 7966496
Connect: ('127.0.0.1', 1185) 7965888
        got Hello network world on 7965888
        got  on 7965888
---
Connect: ('127.0.0.1', 1186) 7965536
Connect: ('127.0.0.1', 1187) 7966224
        got Hello network world on 7965536
Connect: ('127.0.0.1', 1188) 7964080
        got Hello network world on 7966224
Connect: ('127.0.0.1', 1189) 7963552
        got  on 7965536
        got Hello network world on 7964080
Connect: ('127.0.0.1', 1190) 7963872
        got  on 7966224
        got Hello network world on 7963552
Connect: ('127.0.0.1', 1191) 7965056
        got  on 7964080
        got Hello network world on 7963872
Connect: ('127.0.0.1', 1192) 7965104
        got  on 7963552
        got Hello network world on 7965056
Connect: ('127.0.0.1', 1193) 7965472
        got  on 7963872
        got Hello network world on 7965104
        got  on 7965056
        got  on 7965104
        got Hello network world on 7965472
        got  on 7965472
---
Connect: ('127.0.0.1', 1202) 7966176
Connect: ('127.0.0.1', 1203) 7963024
        got Hello network world on 7966176
Connect: ('127.0.0.1', 1204) 7965712
        got Hello network world on 7963024
        got  on 7966176
        got Hello network world on 7965712
        got  on 7963024
        got  on 7965712
Connect: ('127.0.0.1', 1205) 7966176
        got Hello network world on 7966176
        got  on 7966176
Connect: ('127.0.0.1', 1206) 7965712
        got Hello network world on 7965712
        got  on 7965712
Connect: ('127.0.0.1', 1207) 7965424
Connect: ('127.0.0.1', 1208) 7966128
        got Hello network world on 7965424
        got Hello network world on 7966128
        got  on 7965424
        got  on 7966128
Connect: ('127.0.0.1', 1209) 7965216
        got Hello network world on 7965216
        got  on 7965216
---
Connect: ('127.0.0.1', 1218) 7965056
        got Hello network world on 7965056
Connect: ('127.0.0.1', 1219) 7966688
Connect: ('127.0.0.1', 1220) 7963920
        got  on 7965056
        got Hello network world on 7966688
Connect: ('127.0.0.1', 1221) 7963552
        got Hello network world on 7963920
Connect: ('127.0.0.1', 1222) 7965904
        got  on 7966688
        got Hello network world on 7963552
Connect: ('127.0.0.1', 1223) 7966288
        got  on 7963920
        got Hello network world on 7965904
        got  on 7963552
        got Hello network world on 7966288
        got  on 7965904
        got  on 7966288
Connect: ('127.0.0.1', 1224) 7963552
        got Hello network world on 7963552
        got  on 7963552
Connect: ('127.0.0.1', 1225) 7966640
        got Hello network world on 7966640
        got  on 7966640





