本人最近在研究UDT协议,想用它写一个Windows下运行的客户端,用c++编写,在写完测试时发现个问题,随后用UDE demo测试发现问题依然存在。(非Rendezvous模式)
运行环境:
Win7 VS2010 UDT版本4.11
问题描述:
因为是一个长期运行的程序,修改UDT demo recvfile.cpp 使它循环发送,不退出 对connect做如下处理
if (UDT::ERROR == UDT::connect(fhandle, peer->ai_addr, peer->ai_addrlen))
{
cout << "connect: " << UDT::getlasterror().getErrorMessage() << endl;
UDT::close(fhandle);
freeaddrinfo(peer);
continue ;
}
运行demo,让它连接一个不存在的IP,发现demo在运行几次后就会死掉,大约3次左右,使用VS2010调试,发现在死在UDT的接收线程里面,
CRcvQueue::worker(LPVOID param)函数的self->m_pRendezvousQueue->updateConnStatus();_而GC线程停在等待释放接收线程的位置。
再跟进去看发现是一个list的迭代器获取失败导致的,但是我没有找到有对这个容器的修改啊,希望有那个知道的大牛讲解下,万分感谢。