Changeset 64:4c61b3e59d5a in livinglogic.python.tipimaid

Show
Ignore:
Timestamp:
01/05/09 17:07:25 (10 years ago)
Author:
Nikolas Tautenhahn <nik@…>
Branch:
default
Message:

make server port configurable

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • liaalh_server.py

    r61 r64  
    44import sys, socket, select 
    55 
    6 port = 40000 
    7 backlog = 5 
    8 size = 8192 
    9 input = [] 
    10 sockets = [] 
    11 for (af, socktype, proto, canonname, sa) in socket.getaddrinfo(None, port, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE): 
     6def intify(s, defaultint=0): 
    127    try: 
    13         s = socket.socket(af, socktype, proto) 
    14     except socket.error, msg: 
    15         s = None 
    16         continue 
    17     try: 
    18         s.setblocking(0) 
    19         s.bind(sa) 
    20         s.listen(backlog) 
    21         sockets.append(s) 
    22     except socket.error, msg: 
    23         s.close() 
    24         s = None 
    25         continue 
     8        return int(s) 
     9    except ValueError, exc: 
     10        return defaultint 
    2611 
    27 input = sockets[:] 
    28 inputs = {} 
     12def run (port=40000): 
     13    backlog = 5 
     14    size = 8192 
     15    input = [] 
     16    sockets = [] 
     17    for (af, socktype, proto, canonname, sa) in socket.getaddrinfo(None, port, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE): 
     18        try: 
     19            s = socket.socket(af, socktype, proto) 
     20        except socket.error, msg: 
     21            s = None 
     22            continue 
     23        try: 
     24            s.setblocking(0) 
     25            s.bind(sa) 
     26            s.listen(backlog) 
     27            sockets.append(s) 
     28        except socket.error, msg: 
     29            s.close() 
     30            s = None 
     31            continue 
    2932 
    30 while True: 
    31     (inputready, outputready, exceptready) = select.select(input, [], [], 60) 
    32     for s in inputready: 
    33         if s in sockets: 
    34             # handle the server sockets 
    35             client, address = s.accept() 
    36             input.append(client) 
    37             inputs[client] = "" 
    38         else: 
    39             # handle all other sockets 
    40             try: 
    41                 data = s.recv(size) 
    42                 if data: 
    43                     s.send("1") # notify the sender that we got something DISABLE THIS IF WE USE NETCAT AS SENDER! 
    44                     inputs[s] += data 
    45                     pos = inputs[s].rfind("\n") 
    46                     if pos >= 0: 
    47                         sys.stdout.write(inputs[s][:pos+1]) 
    48                         sys.stdout.flush() 
    49                         inputs[s] = inputs[s][pos+1:] 
    50                 else: 
    51                     raise socket.error 
    52             except socket.error, exc: 
    53                 s.close() 
    54                 del inputs[s] 
    55                 input.remove(s) 
    56                 continue 
     33    input = sockets[:] 
     34    inputs = {} 
     35 
     36    while True: 
     37        (inputready, outputready, exceptready) = select.select(input, [], [], 60) 
     38        for s in inputready: 
     39            if s in sockets: 
     40                # handle the server sockets 
     41                client, address = s.accept() 
     42                input.append(client) 
     43                inputs[client] = "" 
     44            else: 
     45                # handle all other sockets 
     46                try: 
     47                    data = s.recv(size) 
     48                    if data: 
     49                        s.send("1") # notify the sender that we got something DISABLE THIS IF WE USE NETCAT AS SENDER! 
     50                        inputs[s] += data 
     51                        pos = inputs[s].rfind("\n") 
     52                        if pos >= 0: 
     53                            sys.stdout.write(inputs[s][:pos+1]) 
     54                            sys.stdout.flush() 
     55                            inputs[s] = inputs[s][pos+1:] 
     56                    else: 
     57                        raise socket.error 
     58                except socket.error, exc: 
     59                    s.close() 
     60                    del inputs[s] 
     61                    input.remove(s) 
     62                    continue 
     63 
     64def main(args=None): 
     65    import optparse 
     66    p = optparse.OptionParser(usage="usage: %prog port") 
     67    (options, args) = p.parse_args() 
     68    if len(args) != 1 or intify(args[0], None) is None: 
     69        p.print_usage(sys.stderr) 
     70        sys.stderr.flush() 
     71        return 1 
     72    run(port=intify(args[0], 40000)) 
     73 
     74if __name__ == "__main__": 
     75    sys.exit(main())