Skip to content
Snippets Groups Projects
Commit 62c5105b authored by jkerdreu's avatar jkerdreu
Browse files

Working w/ new_sock

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2717 b32b6428-25c9-4566-ad07-03861ab6144f
parent abddac8e
No related branches found
No related tags found
No related merge requests found
import asyncio
import socket
import struct
import uuid
ADDR = '224.0.29.200'
PORT = 1235
PORT = 1230
class EchoServerProtocol(asyncio.Protocol):
def __init__(self,on_con_lost):
self.on_con_lost = on_con_lost
#self.on_con_lost = on_con_lost
pass
def connection_made(self, transport):
#import pdb;pdb.set_trace()
sock = transport.get_extra_info('socket')
(addr,port) = sock.getsockname()
mreq = struct.pack('4sl',socket.inet_aton(addr),socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,mreq)
sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL,10)
self.transport = transport
def error_received(self, exc):
......@@ -24,7 +19,7 @@ class EchoServerProtocol(asyncio.Protocol):
def connection_lost(self, exc):
print("Connection closed")
self.on_con_lost.set_result(True)
#self.on_con_lost.set_result(True)
def datagram_send(self,data):
self.transport.sendto(data,(ADDR,PORT))
......@@ -33,27 +28,43 @@ class EchoServerProtocol(asyncio.Protocol):
print('Received %r from %s' % (data, addr))
async def test_send(protocol):
async def test_send(protocol,uid):
while True:
protocol.datagram_send("FooBar".encode("utf-8"))
await asyncio.sleep(10)
msg = f"msg from {uid}"
protocol.datagram_send(msg.encode("utf-8"))
await asyncio.sleep(5)
def new_sock():
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,socket.IPPROTO_UDP)
try:
# Linux + MacOS + BSD
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
except:
# Windows
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('0.0.0.0', PORT))
mreq = struct.pack('4sl',socket.inet_aton(ADDR),socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,mreq)
sock.setsockopt(socket.IPPROTO_IP,socket.IP_MULTICAST_TTL,10)
return sock
async def main():
loop = asyncio.get_running_loop()
print("Starting UDP server")
on_con_lost = loop.create_future()
transport, protocol = await loop.create_datagram_endpoint( lambda: EchoServerProtocol(on_con_lost), local_addr=(ADDR, PORT),reuse_port=True)
asyncio.ensure_future(test_send(protocol))
transport, protocol = await loop.create_datagram_endpoint( lambda: EchoServerProtocol(on_con_lost,), sock=new_sock())
#transport, protocol = await loop.create_datagram_endpoint( lambda: EchoServerProtocol(on_con_lost), local_addr=(ADDR, PORT),reuse_port=True)
asyncio.ensure_future(test_send(protocol,uuid.uuid1()))
try:
await asyncio.sleep(3600) # Serve for 1 hour.
finally:
transport.close()
try:
asyncio.run(main())
except KeyboardInterrupt:
print("Bye Bye")
\ No newline at end of file
if __name__ == '__main__':
try:
asyncio.run(main())
except KeyboardInterrupt:
print("Bye Bye")
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment