[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