Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

getaddrinfo() returns wrong scope ID for IPv6 link-local addresses when type=SocketKind.SOCK_STREAM

Aberta
#539 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
python
Domínio
networking

Direção de pesquisa

Comece executando o script de reprodução fornecido no Linux com um endereço IPv6 link-local, comparando uvloop com vanilla asyncio e socket.getaddrinfo(). O problema estará resolvido quando uvloop retornar o ID de escopo correto diferente de zero para SOCK_STREAM, correspondendo às outras implementações.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

  • uvloop version: 0.17.0
  • Python version: 3.11.3
  • Platform: Linux
  • Can you reproduce the bug with PYTHONASYNCIODEBUG in env?: yes
  • Does uvloop behave differently from vanilla asyncio? How?: Vanilla asyncio returns the correct scope ID, uvloop returns 0

When passing type=SocketKind.SOCK_STREAM to getaddrinfo() in uvloop, the scope ID for link-local addresses is left as 0. This works correctly (returns nonzero scope ID) in socket.getaddrinfo() and vanilla asyncio's corresponding function.

Repro script (requires psutil installed):

from asyncio import get_running_loop, run
from socket import SocketKind

import psutil
import uvloop


async def main():
    for ifname, addresses in psutil.net_if_addrs().items():
        for addr in addresses:
            if addr.address.startswith("fe80::") and "%" in addr.address:
                gai_res = await get_running_loop().getaddrinfo(addr.address, 0, type=SocketKind.SOCK_STREAM)
                scope_id = gai_res[-1][-1][-1]
                print("Scope id for", gai_res[-1], "is", scope_id)
                return

    print("Could not find a suitable link-local address")

# Comment out this line, and it works fine
uvloop.install()
run(main())
Linguagem predominante
Cython
Estrelas
11.9k
Forks
615
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Ainda não verificamos os arquivos de configuração deste projeto. Comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de MagicStack/uvloop

Todas as issues de MagicStack/uvloop

Issues semelhantes

Mais issues de Networking

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.