root/livinglogic.python.tipimaid/liaalh_server.py @ 61:cf510845ffb1

Revision 61:cf510845ffb1, 1.2 KB (checked in by Nikolas Tautenhahn <nik@…>, 11 years ago)

removed unnecessary todo

  • Property exe set to *
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import sys, socket, select
5
6port = 40000
7backlog = 5
8size = 8192
9input = []
10sockets = []
11for (af, socktype, proto, canonname, sa) in socket.getaddrinfo(None, port, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
12    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
26
27input = sockets[:]
28inputs = {}
29
30while 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
Note: See TracBrowser for help on using the browser.