LINUX.ORG.RU

Разное поведение transport.get_extra_info в дефолтном asyncio и uvloop.

 , , uvloop


1

3

Хочу вот перевести свою поделку на uvloop, но столкнулся с такой вот проблемой.

Код:

import asyncio

import uvloop


async def test(loop):
    transport, protocol = await loop.create_datagram_endpoint(
        asyncio.DatagramProtocol, remote_addr=('45.76.92.79', 26000))
    print(type(transport), transport.get_extra_info('sockname'))

loop = asyncio.new_event_loop()
loop.run_until_complete(test(loop))
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
loop = asyncio.new_event_loop()
loop.run_until_complete(test(loop))

Вывод:

<class 'asyncio.selector_events._SelectorDatagramTransport'> ('45.76.92.79', 38734)
<class 'uvloop.loop.UDPTransport'> ('0.0.0.0', 50589)

Почитав сорцы uvloop'а я заметил, что если не указан локальный адрес в аргументах у create_datagram_endpoint, тогда uvloop вызывает socket.bind('0.0.0.0'). Но мне как бы очень нужен локальный айпи, и очень не хочется указывать его в конфиге.

Собственно вопроса два - зачем вызывать бинд на 0.0.0.0, и можно ли как-то автоматически задетектить локальный айпи адрес перед вызовом create_datagram_endpoint?

★★★★★
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.