Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

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

Ouverte
#539 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
networking

Piste de recherche

Commencez par exécuter le script de reproduction fourni sous Linux avec une adresse IPv6 link-local, en comparant uvloop à vanilla asyncio et à socket.getaddrinfo(). Le problème est résolu lorsque uvloop renvoie le bon ID de portée non nul pour SOCK_STREAM, comme les autres implémentations.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

  • 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())
Langage dominant
Cython
Étoiles
11.9k
Forks
615
Métriques de merge des PR
Aucune PR mergée en 30 j

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de MagicStack/uvloop

Toutes les issues de MagicStack/uvloop

Issues similaires

Plus d'issues Networking

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.