我有两个几乎相同的测试程序(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。
我在网上查过这些错误......不是很有帮助。
任何人都知道这些是什么意思,如果发生这种情况,我如何在程序中恢复?有没有办法重置插座?
健全性检查....两个程序都可以在只有两个端口的环回上运行吗?A 发送 = 20000,A 接收 = 20001 B 发送 = 20001,B 接收 = 20000
TL;DR 看起来好像我在发送之前尝试收听,我收到一个错误并且我无法从中恢复。如果我在发送后听,我很好。
- 编辑 - 看来 McAfee 主机入侵防护对我做了一些讨厌的事情......如果我在 VS2010 中调试,我会卡在他们的 DLL 中。
谢谢