Tests for the NetworkSocketAPI

Dependents:   BSDInterfaceTests ESP8266InterfaceTests LWIPInterfaceTests SpwfInterface_NSAPI_Tests ... more

Committer:
c1728p9
Date:
Tue May 10 21:38:38 2016 -0500
Revision:
11:fbfe3498404a
Parent:
4:b52f17273177
Child:
12:152ae238ddc1
Add support for IPv6

Who changed what in which revision?

UserRevisionLine numberNew 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
c1728p9 11:fbfe3498404a 21 udp6 = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
c1728p9 11:fbfe3498404a 22 udp6.bind(('', port))
c1728p9 11:fbfe3498404a 23 udp6.setblocking(0)
c1728p9 11:fbfe3498404a 24 udp6.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
c1728p9 11:fbfe3498404a 25
c1728p9 11:fbfe3498404a 26 tcp6 = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
c1728p9 11:fbfe3498404a 27 tcp6.bind(('', port))
c1728p9 11:fbfe3498404a 28 tcp6.setblocking(0)
c1728p9 11:fbfe3498404a 29 tcp6.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
c1728p9 11:fbfe3498404a 30 tcp6.listen(5)
c1728p9 11:fbfe3498404a 31
Christopher Haster 4:b52f17273177 32 print "running on port %d" % port
c1728p9 11:fbfe3498404a 33 sockets = [tcp, udp, tcp6, udp6]
Christopher Haster 4:b52f17273177 34 clients = []
Christopher Haster 4:b52f17273177 35
Christopher Haster 4:b52f17273177 36 while True:
Christopher Haster 4:b52f17273177 37 select.select(sockets, [], [])
Christopher Haster 4:b52f17273177 38
Christopher Haster 4:b52f17273177 39 try:
Christopher Haster 4:b52f17273177 40 data, addr = udp.recvfrom(1 << 12)
Christopher Haster 4:b52f17273177 41 print 'udp %s:%d %d' % (addr[0], addr[1], len(data))
Christopher Haster 4:b52f17273177 42 udp.sendto(data, addr)
Christopher Haster 4:b52f17273177 43 except socket.error:
Christopher Haster 4:b52f17273177 44 pass
Christopher Haster 4:b52f17273177 45
Christopher Haster 4:b52f17273177 46 try:
Christopher Haster 4:b52f17273177 47 client, addr = tcp.accept()
Christopher Haster 4:b52f17273177 48 print 'tcp %s:%d connect' % (addr[0], addr[1])
Christopher Haster 4:b52f17273177 49 client.setblocking(0)
Christopher Haster 4:b52f17273177 50 client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Christopher Haster 4:b52f17273177 51 sockets.append(client)
Christopher Haster 4:b52f17273177 52 clients.append((client, addr))
Christopher Haster 4:b52f17273177 53 except socket.error:
Christopher Haster 4:b52f17273177 54 pass
Christopher Haster 4:b52f17273177 55
c1728p9 11:fbfe3498404a 56 try:
c1728p9 11:fbfe3498404a 57 data, addr = udp6.recvfrom(1 << 12)
c1728p9 11:fbfe3498404a 58 print 'udp6 %s:%d %d' % (addr[0], addr[1], len(data))
c1728p9 11:fbfe3498404a 59 udp6.sendto(data, addr)
c1728p9 11:fbfe3498404a 60 except socket.error:
c1728p9 11:fbfe3498404a 61 pass
c1728p9 11:fbfe3498404a 62
c1728p9 11:fbfe3498404a 63 try:
c1728p9 11:fbfe3498404a 64 client, addr = tcp6.accept()
c1728p9 11:fbfe3498404a 65 print 'tcp6 %s:%d connect' % (addr[0], addr[1])
c1728p9 11:fbfe3498404a 66 client.setblocking(0)
c1728p9 11:fbfe3498404a 67 client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
c1728p9 11:fbfe3498404a 68 sockets.append(client)
c1728p9 11:fbfe3498404a 69 clients.append((client, addr))
c1728p9 11:fbfe3498404a 70 except socket.error:
c1728p9 11:fbfe3498404a 71 pass
c1728p9 11:fbfe3498404a 72
Christopher Haster 4:b52f17273177 73 for client, addr in clients:
Christopher Haster 4:b52f17273177 74 try:
Christopher Haster 4:b52f17273177 75 data = client.recv(1 << 12)
Christopher Haster 4:b52f17273177 76 if data:
Christopher Haster 4:b52f17273177 77 print 'tcp %s:%d %d' % (addr[0], addr[1], len(data))
Christopher Haster 4:b52f17273177 78 client.send(data)
Christopher Haster 4:b52f17273177 79 else:
Christopher Haster 4:b52f17273177 80 print 'tcp %s:%d disconnect' % (addr[0], addr[1])
Christopher Haster 4:b52f17273177 81 sockets.remove(client)
Christopher Haster 4:b52f17273177 82 clients.remove((client, addr))
Christopher Haster 4:b52f17273177 83 client.close()
Christopher Haster 4:b52f17273177 84 except socket.error:
Christopher Haster 4:b52f17273177 85 pass
Christopher Haster 4:b52f17273177 86
Christopher Haster 4:b52f17273177 87
Christopher Haster 4:b52f17273177 88 if __name__ == "__main__":
Christopher Haster 4:b52f17273177 89 import sys
Christopher Haster 4:b52f17273177 90 main(*sys.argv[1:])