Tests for the NetworkSocketAPI
Dependents: BSDInterfaceTests ESP8266InterfaceTests LWIPInterfaceTests SpwfInterface_NSAPI_Tests ... more
EchoServer.py@7:444bc156318f, 2016-03-03 (annotated)
- Committer:
- Brian Daniels
- Date:
- Thu Mar 03 14:19:34 2016 -0600
- Revision:
- 7:444bc156318f
- Parent:
- 4:b52f17273177
- Child:
- 11:fbfe3498404a
Adding different packet sizes for socket tests. Also making sure non-blocking recv is non-blocking
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Christopher Haster |
4:b52f17273177 | 1 | #!/usr/bin/env python |
Christopher Haster |
4:b52f17273177 | 2 | import socket |
Christopher Haster |
4:b52f17273177 | 3 | import signal |
Christopher Haster |
4:b52f17273177 | 4 | import select |
Christopher Haster |
4:b52f17273177 | 5 | |
Christopher Haster |
4:b52f17273177 | 6 | |
Christopher Haster |
4:b52f17273177 | 7 | def main(port): |
Christopher Haster |
4:b52f17273177 | 8 | port = int(port) |
Christopher Haster |
4:b52f17273177 | 9 | |
Christopher Haster |
4:b52f17273177 | 10 | udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
Christopher Haster |
4:b52f17273177 | 11 | udp.bind(('', port)) |
Christopher Haster |
4:b52f17273177 | 12 | udp.setblocking(0) |
Christopher Haster |
4:b52f17273177 | 13 | udp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
Christopher Haster |
4:b52f17273177 | 14 | |
Christopher Haster |
4:b52f17273177 | 15 | tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
Christopher Haster |
4:b52f17273177 | 16 | tcp.bind(('', port)) |
Christopher Haster |
4:b52f17273177 | 17 | tcp.setblocking(0) |
Christopher Haster |
4:b52f17273177 | 18 | tcp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
Christopher Haster |
4:b52f17273177 | 19 | tcp.listen(5) |
Christopher Haster |
4:b52f17273177 | 20 | |
Christopher Haster |
4:b52f17273177 | 21 | print "running on port %d" % port |
Christopher Haster |
4:b52f17273177 | 22 | sockets = [tcp, udp] |
Christopher Haster |
4:b52f17273177 | 23 | clients = [] |
Christopher Haster |
4:b52f17273177 | 24 | |
Christopher Haster |
4:b52f17273177 | 25 | while True: |
Christopher Haster |
4:b52f17273177 | 26 | select.select(sockets, [], []) |
Christopher Haster |
4:b52f17273177 | 27 | |
Christopher Haster |
4:b52f17273177 | 28 | try: |
Christopher Haster |
4:b52f17273177 | 29 | data, addr = udp.recvfrom(1 << 12) |
Christopher Haster |
4:b52f17273177 | 30 | print 'udp %s:%d %d' % (addr[0], addr[1], len(data)) |
Christopher Haster |
4:b52f17273177 | 31 | udp.sendto(data, addr) |
Christopher Haster |
4:b52f17273177 | 32 | except socket.error: |
Christopher Haster |
4:b52f17273177 | 33 | pass |
Christopher Haster |
4:b52f17273177 | 34 | |
Christopher Haster |
4:b52f17273177 | 35 | try: |
Christopher Haster |
4:b52f17273177 | 36 | client, addr = tcp.accept() |
Christopher Haster |
4:b52f17273177 | 37 | print 'tcp %s:%d connect' % (addr[0], addr[1]) |
Christopher Haster |
4:b52f17273177 | 38 | client.setblocking(0) |
Christopher Haster |
4:b52f17273177 | 39 | client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
Christopher Haster |
4:b52f17273177 | 40 | sockets.append(client) |
Christopher Haster |
4:b52f17273177 | 41 | clients.append((client, addr)) |
Christopher Haster |
4:b52f17273177 | 42 | except socket.error: |
Christopher Haster |
4:b52f17273177 | 43 | pass |
Christopher Haster |
4:b52f17273177 | 44 | |
Christopher Haster |
4:b52f17273177 | 45 | for client, addr in clients: |
Christopher Haster |
4:b52f17273177 | 46 | try: |
Christopher Haster |
4:b52f17273177 | 47 | data = client.recv(1 << 12) |
Christopher Haster |
4:b52f17273177 | 48 | if data: |
Christopher Haster |
4:b52f17273177 | 49 | print 'tcp %s:%d %d' % (addr[0], addr[1], len(data)) |
Christopher Haster |
4:b52f17273177 | 50 | client.send(data) |
Christopher Haster |
4:b52f17273177 | 51 | else: |
Christopher Haster |
4:b52f17273177 | 52 | print 'tcp %s:%d disconnect' % (addr[0], addr[1]) |
Christopher Haster |
4:b52f17273177 | 53 | sockets.remove(client) |
Christopher Haster |
4:b52f17273177 | 54 | clients.remove((client, addr)) |
Christopher Haster |
4:b52f17273177 | 55 | client.close() |
Christopher Haster |
4:b52f17273177 | 56 | except socket.error: |
Christopher Haster |
4:b52f17273177 | 57 | pass |
Christopher Haster |
4:b52f17273177 | 58 | |
Christopher Haster |
4:b52f17273177 | 59 | |
Christopher Haster |
4:b52f17273177 | 60 | if __name__ == "__main__": |
Christopher Haster |
4:b52f17273177 | 61 | import sys |
Christopher Haster |
4:b52f17273177 | 62 | main(*sys.argv[1:]) |