getaddrinfo() returns wrong scope ID for IPv6 link-local addresses when type=SocketKind.SOCK_STREAM
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
PYTHONASYNCIODEBUGin 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
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de MagicStack/uvloop
-
License not clearAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
MagicStack/uvloop#759 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
MagicStack/uvloop#741 · 2 reações ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
MagicStack/uvloop#702 · 8 comentários · 9 reações ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 25/100
MagicStack/uvloop#766 ·
-
Directly constructed subprocess pipe protocols segfault when callbacks use a non-process ownerAberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 52/100
MagicStack/uvloop#765 ·
Todas as issues de MagicStack/uvloop
Issues semelhantes
-
bug status/needs-triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
prowler-cloud/prowler#12885 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
area/proxy kind/bug priority/backlog triage/accepted
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
lexfrei/cloudflare-tunnel-gateway-controller#840 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
callstackincubator/appduct#129 ·
Mantenedores costumam responder em até 1 dia
-
area/auth area/install-update comp/cli P2 sweeper:risk-compatibility type/bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
NousResearch/hermes-agent#124654 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia