正在打开具有零填充IP字符串的升压套接字
Opening a boost socket with zero padding IP string
我使用的是boost 1.53,打开套接字的代码如下:
void openConnection(std::string ip, std::string port)
{
tcp::resolver resolver_( m_ioService );
tcp::resolver::query query(boost::asio::ip::tcp::v4(), ip, port);
tcp::resolver::iterator iterator = resolver_.resolve(query);
boost::shared_ptr<tcp::socket> socket_(new tcp::socket(m_ioService));
boost::asio::connect(*socket_, iterator);
m_tcpSocket = socket_;
}
如果我使用ip="192.168.2.50",我很好,但如果我使用"192.168.002.050",我无法打开连接。
有没有任何方法可以为此类字符串调整tcp::resolver::query对象?
如果192.168.002.50
确实有效,我会说这是一次失败的八进制解码尝试(这不应该发生)。
否则,它似乎是boost::asio::ip::address_v::from_string
中的一个限制。毫无疑问,这将有合理的理由(我没有记住RFC)。
您总是可以手动解析,并使用采用八位字节的构造函数:
address_v4(address_v4::bytes_type {192,168,2,50});
- http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference/ip__address_v4.html