[issue21701] create_datagram_endpoint does not receive when both local_addr and remote_addr provided
Allen Riddell
report at bugs.python.org
Tue Jun 10 02:42:27 CEST 2014
Allen Riddell added the comment:
(couldn't figure out how to attach multiple files)
-- client_good.py --
"""Send and receive a messages using DatagramProtocol"""
import asyncio
import time
class Helloer(asyncio.DatagramProtocol):
def connection_made(self, transport):
print('(helloer) connection made')
self.transport = transport
def connection_lost(self, transport):
print('(helloer listener) connection lost!')
def datagram_received(self, data, addr):
print('(helloer listener) received data from {}: {}'.format(addr, data))
def error_received(self, exc):
print('(helloer listener) error received: {}'.format(exc))
loop = asyncio.get_event_loop()
# WORKS:
coro = loop.create_datagram_endpoint(Helloer, local_addr=('127.0.0.1', 8888))
# FAILS (blocks?):
# coro = loop.create_datagram_endpoint(Helloer, local_addr=('127.0.0.1', 8888), remote_addr=('127.0.0.1', 9999))
transport, protocol = loop.run_until_complete(coro)
loop.run_forever()
-- client_bad.py --
"""Send and receive a messages using DatagramProtocol"""
import asyncio
import time
class Helloer(asyncio.DatagramProtocol):
def connection_made(self, transport):
print('(helloer) connection made')
self.transport = transport
def connection_lost(self, transport):
print('(helloer listener) connection lost!')
def datagram_received(self, data, addr):
print('(helloer listener) received data from {}: {}'.format(addr, data))
def error_received(self, exc):
print('(helloer listener) error received: {}'.format(exc))
loop = asyncio.get_event_loop()
# WORKS:
# coro = loop.create_datagram_endpoint(Helloer, local_addr=('127.0.0.1', 8888))
# FAILS (blocks?):
coro = loop.create_datagram_endpoint(Helloer, local_addr=('127.0.0.1', 8888), remote_addr=('127.0.0.1', 9999))
transport, protocol = loop.run_until_complete(coro)
loop.run_forever()
-- sender.py --
"""Send a UDP packet to a specified port and quit"""
import argparse
import socket
import time
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='send a udp packet')
parser.add_argument('host', type=str)
parser.add_argument('port', type=int)
args = parser.parse_args()
host, port = args.host, args.port
time.sleep(0.1)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
data = 'message from sender sent to {}:{}'.format(host, port)
sent = sock.sendto(data.encode('ascii'), (host, port))
print("(sender) sent udp packet to {}:{}".format(host, port))
sock.close()
----------
Added file: http://bugs.python.org/file35547/client_bad.py
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue21701>
_______________________________________
More information about the Python-bugs-list
mailing list