getaddrinfo() returns wrong scope ID for IPv6 link-local addresses when type=SocketKind.SOCK_STREAM
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
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())
- 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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de MagicStack/uvloop
-
License not clear Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
MagicStack/uvloop#759 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
MagicStack/uvloop#741 · 2 réactions ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
MagicStack/uvloop#702 · 8 commentaires · 9 réactions ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
MagicStack/uvloop#766 ·
-
Directly constructed subprocess pipe protocols segfault when callbacks use a non-process owner Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
MagicStack/uvloop#765 ·
Toutes les issues de MagicStack/uvloop
Issues similaires
-
Nmap
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
-
good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Browser (wasm) relay client cannot connect to relays whose URL has a trailing-dot FQDN hostname Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
n0-computer/iroh#4550 ·
-
kind/bug Ubuntu 24
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
kubernetes-sigs/kubespray#13550 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
bytecodealliance/rustix#1689 · 2 commentaires ·