#5477·poco

MongoDB: 具有自定义 SocketFactory 的 ReplicaSet 遇到每次连接都出现 UnknownURISchemeException

作者: matejk创建于 2026年9月11日更新于 2026年9月11日
标签bug

ReplicaSet 使用 Config::socketFactory,文档中描述为"SSL/TLS 连接的可选套接字工厂"(ReplicaSet.h#L125-L128),通过调用 conn->connect(address.toString(), *factory)createConnection() 的两个重载函数中(ReplicaSet.cpp#L480, #L526) 和在 updateTopologyFromHello() 中(#L573)。SocketAddress::toString() 返回 host:port,但 Connection::connect(const std::string& uri, SocketFactory&) 期望一个 MongoDB:// URI,并为任何其他方案抛出 UnknownURISchemeException (Connection.cpp#L157-L160)。Poco::URI 使用方案 127.0.0.1 解析 127.0.0.1:27219,并使用方案 [::1] 解析 [::1]:27219,因此通过工厂创建的每个连接都在调用 createSocket() 之前失败。

内容来源: pocoproject/poco