#! /usr/bin/python

# Using select can handle several input connections at simultaneously

# Derived from sample programs in
#   http://docs.python.org/library/socket.html
# after reading a very useful discussion in
#   http://www.amk.ca/python/howto/sockets/

import socket
import select

MYNETNUM = 0

HOST = ''
PORT = 37300 + MYNETNUM
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)   # not a great idea
s.bind((HOST, PORT))
s.listen(4)
presSum = 0
connectList = [s]
try:
    while 1:
    
        readMe,ignoreMe1,ignoreMe2 = select.select(connectList,[],[])
        
        for c in readMe:
            if c == s:
                conn, addr = s.accept()
                print 'Connection from', addr
                connectList.append(conn)
            else:
                data = c.recv(1024)
                if data:
                    try:
                        presSum += int(data.rstrip().lstrip()) ;
                        c.send(str(presSum)+'\n')
                    except ValueError:
                        c.send('????\n')
                else:
                    addr = c.getpeername()
                    c.close()
                    print 'Disconnection from', addr
                    connectList.remove(c)

except KeyboardInterrupt:
    connectList.remove(s)
    s.close()
    for c in connectList:
        if c != s:
            c.send('Server exiting\n\r') ;
            c.close()
