Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

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

未關閉
#539 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
4/5
預估耗時
3-5 天
新手友好度
35/100
Issue 類型
缺陷
描述清晰度
基本清楚
活躍度
停滯
技術堆疊
python
領域
networking

研究方向

首先,在 Linux 上使用鏈路本地 IPv6 位址執行提供的重現腳本,將 uvloop 與 vanilla asyncio 和 socket.getaddrinfo() 進行比較。當 uvloop 為 SOCK_STREAM 回傳正確的非零範圍 ID,並與其他實作一致時,問題即告解決。

由索引模型根據 Issue 內容生成。

描述

  • 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())
主要語言
Cython
星號
11.9k
分支
615
平均合併
4 小時 43 分鐘
30 天內合併 PR
3

環境準備

這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

MagicStack/uvloop 的其他 Issue

查看 MagicStack/uvloop 的全部 Issue

相似的 Issue

更多 Networking Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。