我正在为我的应用程序使用 Boost 库 (boost_1_53_0)。感兴趣的领域是一个通过 UDP 发送消息的模块。查看下面的代码部分(我已经删除了不会影响功能的不必要的代码部分)。
int send()
{
.
.
.
std::vector<boost::asio::const_buffer> bufs;
writeMessage(bufs);
/* If I comment out writeMessage and fill variable
* bufs the same way its populated in writeMessage,
* things work */
udpSocket.send_to(bufs, endPoint);
}
void writeMessage(std::vector<boost::asio::const_buffer>& bufs)
{
/* Populate data..... */
bufs.push_back(boost::asio::const_buffer(data1, sizeof(data1)));
bufs.push_back(boost::asio::const_buffer(data2, sizeof(data2)));
.
.
.
bufs.push_back(boost::asio::const_buffer(datan, sizeof(datan)));
}
我正在使用wireshark 来检查从系统发出的消息。由于某种原因,不正确的数据被发送出系统。变量 bufs 的引用传递是否正确?同一段代码适用于较旧的 g++ 和 Boost 版本。
如果我注释掉 writeMessage 并在 send() 函数中手动填充向量 buf,一切都很好。只有当我使用函数 writeMessage() 时,数据才会被破坏。
我最近升级到 g++ 4.6.3 和 Boost 1_53_0 并看到了这个问题。我正在使用 Ubuntu 64 位机器。所有库都编译为 64 位。