Misc. bug: log says `http://::1:8080` instead of `http://[::1]:8080`

用户在 Windows 系统上运行 llama.cpp 的 llama-server 命令,并使用 --host ::1 参数指定 IPv6 监听地址。

Misc. bug: log says `http://::1:8080` instead of `http://[::1]:8080`

Misc. bug: log says `http://::1:8080` instead of `http://[::1]:8080`

快速结论:该问题出现在 llama.cpp 的 llama-server 模块中,当用户使用 IPv6 地址(如 ::1)作为主机参数时,日志输出错误地缺少了 RFC 3986 要求的方括号 [ ]。优先排查并应用提供补丁修复。

问题场景

用户在 Windows 系统上运行 llama.cpp 的 llama-server 命令,并使用 --host ::1 参数指定 IPv6 监听地址。

报错原文

I srv  llama_server: listening on http://::1:8080

期望的输出应为:

I srv  llama_server: listening on http://[::1]:8080

原因分析

根据 Issue 讨论,根本原因在于代码中拼接 URL 字符串时,未对 IPv6 地址进行 RFC 3986 合规的括号包裹。IPv6 字面量内部包含冒号,如果不加方括号,URL 解析器可能会将冒号误判为端口分隔符。补丁已在 tools/server/server-http.cpp 中建议修改。

环境排查

  • llama.cpp 版本:b9830-c1a1c8ee9
  • 操作系统:Windows
  • 影响的模块:llama-server(server-http.cpp
  • 命令行参数:--host ::1 或任何 IPv6 地址

解决步骤

  1. 找到 llama.cpp 源码中的 tools/server/server-http.cpp 文件。
  2. 定位到 server_http_context::start() 函数中,约第 440 行附近。
  3. 修改以下逻辑(根据 Issue 评论中的补丁):
    在构建 listening_address 之前,增加对 IPv6 地址的括号处理:
    const std::string host_url = hostname.find(':') != std::string::npos ? "[" + hostname + "]" : hostname;
  4. listening_address 的格式化字符串中的 hostname.c_str() 替换为 host_url.c_str()

验证方法

重新编译 llama-server 后,使用相同命令 .\llama.exe server --host ::1 ... 启动,观察日志输出是否变为 http://[::1]:8080

参考来源

ggml-org/llama.cpp #25135

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 11099

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注