【发布时间】:2013-03-25 22:45:24
【问题描述】:
我有两个几乎相同的测试程序(A 和 B),它们使用相同的 boost asio UDP 异步代码。
这是接听电话:
_mSocket.async_receive_from(
boost::asio::buffer(_mRecvBuffer), _mReceiveEndpoint,
boost::bind(&UdpConnection::handle_receive, this,_mReceiveEndpoint,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
// _mReceiveEndpoint is known and good. the buffer is good too.
// 这是处理程序
void handle_receive(const udp::endpoint recvFromEP, const boost::system::error_code& error,std::size_t bytesRecv/*bytes_transferred*/)
{
boost::shared_ptr<std::string> message(new std::string(_mRecvBuffer.c_array(),bytesRecv));
if (!error)
{
doSomeThingGood();
}
else {
cerr << "UDP Recv error : " << error << endl;
}
}
所以这就是发生的事情,都在本地主机上。
如果我先启动程序“A”,然后程序“B”,“A”会给出 UDP Recv 错误:服务器:10061。 程序“A”继续发送正常,“B”接收正常。
你可以在上面的句子中交换'A'和'B',它仍然是正确的。
如果我通过再次调用 mSocket.async_receive_from 尝试重置错误的读取条件,则会收到错误 10054。
我在网上查过这些错误.....不是很有帮助。
任何人都知道这些是什么意思,如果发生这种情况,我如何在程序内部恢复?有没有办法重置套接字?
健全性检查.... 两个程序都可以在只有两个端口的环回上运行吗? 发送 = 20000,接收 = 20001 B 发送 = 20001,B 接收 = 20000
TL;DR 好像我在发送之前尝试收听,我收到一个错误并且我无法从中恢复。如果我在发送后收听,我很好。
-- 编辑 - 似乎 McAfee 主机入侵防护对我做了一些讨厌的事情......如果我在 VS2010 中调试,我会卡在他们的 DLL 中。
谢谢
【问题讨论】:
-
显然,在您可以在两个进程之间共享端口之前需要进行一些技巧:stackoverflow.com/questions/4364434/…
标签: udp boost-asio socketexception