![Misc. bug: log says `http://::1:8080` instead of `http://[::1]:8080`](https://www.chat-gpts.plus/wp-content/uploads/2026/06/25135-cded6097.jpg)
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 地址
解决步骤
- 找到 llama.cpp 源码中的
tools/server/server-http.cpp文件。 - 定位到
server_http_context::start()函数中,约第 440 行附近。 - 修改以下逻辑(根据 Issue 评论中的补丁):
在构建listening_address之前,增加对 IPv6 地址的括号处理:
const std::string host_url = hostname.find(':') != std::string::npos ? "[" + hostname + "]" : hostname; - 将
listening_address的格式化字符串中的hostname.c_str()替换为host_url.c_str()。
验证方法
重新编译 llama-server 后,使用相同命令 .\llama.exe server --host ::1 ... 启动,观察日志输出是否变为 http://[::1]:8080。



