동일한 부스트 asio UDP 비동기 코드를 사용하는 두 개의 테스트 프로그램 (A & B)이 거의 동일합니다. 로컬 호스트 // 여기부스트 ASIO 및 UDP 오류
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;
}
}
그래서 여기 무슨 일이야 핸들러에게의
_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.
모든 :
여기에 수신 호출입니다.
프로그램 'A'를 먼저 시작한 다음 프로그램 'B'를 시작하면 'A'는 UDP Recv 오류 : server : 10061을 제공합니다. 프로그램 'A'는 계속 잘 보냅니다. 'B'는 괜찮습니다.
위의 문장에서 'A'와 'B'를 바꿀 수 있으며 여전히 사실입니다. 내가 다시 mSocket.async_receive_from를 호출하여 나쁜 읽기 조건의 재설정을 시도 할 경우
, 나는 내가 웹에서 이러한 오류를 검토 한 10054.
오류 ..... 매우 도움이되지 얻을.
아무도 이러한 의미가 무엇인지, 그리고이 조건이 발생하면 프로그램 내부에서 어떻게 복구 할 수 있는지에 대한 아이디어가 있습니까? 소켓을 재설정하는 방법이 있습니까?
온 전성 검사 .... 두 프로그램 모두 두 포트만 사용하여 루프백에서 작동 할 수 있습니까? 보내기 = 20000, A는 수신 = 20001 B의 전송 = 20001, B 수신 = 20000
TL; DR이 나타납니다 내가 보내고있다 전에 경청하려고하면, 나는 오류가 발생하지만 & 내가 할 수있는 그것에서 회복하지 못한다. 내가 보낸 후, 나는 괜찮아.
- EDIT - McAfee 호스트 침입 방지 기능이 나에게 불쾌한 짓을하고있는 것으로 보입니다. 만약 VS2010에서 디버깅을하면 DLL에 문제가 생길 수 있습니다.
덕분에 내받을 핸들러에서
: http://stackoverflow.com/questions/4364434/let-two-udp-servers-listen - 같은 - 포트 –