谷博士您好,最近使用udt发现我模拟服务端在接收数据的时候偶尔出现点问题,原因 是int CRcvBuffer::readBuffer(char* data, int len)这个方法中偶尔会出现int unitsize = m_pUnit[p]->m_Packet.getLength() - m_iNotch;这句语句中的 m_pUnit[p]->m_Packet为空指针,导致程序调用错误,问下这个情况是什么原因导致 的,谢谢了,以下是我的一些测试代码。
服务端接收数据代码如下:
while (true)
{
int iWaitResult = UDT::epoll_wait(eid, &readfds, NULL, 5000); if (iWaitResult<0){ continue; } for (set<UDTSOCKET>::iterator i = readfds.begin(); i !=
readfds.end(); ++ i)
{ nRecvResult = UDT::recv(*i, buffer, MAX_BUF_SIZE, 0); if ( nRecvResult <= 0 ) { int errorcode =
UDT::getlasterror().getErrorCode();
printf("sockID:%d Errorcode:%d %s\n", (*i),
errorcode,
UDT::getlasterror_desc()); if (errorcode != CUDTException::EASYNCRCV) { m_Socks.erase(*i); int ret1 = 0, ret2 = 0; ret1 = UDT::epoll_remove_usock(eid,
*i);
ret2 = UDT::close(*i); m_nNumberOfActiveConnections --; printf("epoll_remove_usock return:%d
close return:%d\n", ret1, ret2);
} cout << "Receive:" <<
UDT::getlasterror().getErrorMessage() << endl;
continue; } }
}
客户端模拟使用一个客户端一个线程,开了200个线程,线程中发送代码如下:
DWORD WINAPI UdtDataSend(LPVOID param)
UDTSOCKET usock =*(UDTSOCKET*)param; char buffer[MAX_BUF_SIZE]; memset(buffer,'1',sizeof(buffer)); int rc = 0; while(true) { rc = UDT::send(usock, buffer, MAX_BUF_SIZE, 0); } return NULL;
Log in to post a comment.
谷博士您好,最近使用udt发现我模拟服务端在接收数据的时候偶尔出现点问题,原因
是int CRcvBuffer::readBuffer(char* data, int len)这个方法中偶尔会出现int
unitsize = m_pUnit[p]->m_Packet.getLength() - m_iNotch;这句语句中的
m_pUnit[p]->m_Packet为空指针,导致程序调用错误,问下这个情况是什么原因导致
的,谢谢了,以下是我的一些测试代码。
服务端接收数据代码如下:
while (true)
{
readfds.end(); ++ i)
UDT::getlasterror().getErrorCode();
errorcode,
*i);
close return:%d\n", ret1, ret2);
UDT::getlasterror().getErrorMessage() << endl;
}
客户端模拟使用一个客户端一个线程,开了200个线程,线程中发送代码如下:
DWORD WINAPI UdtDataSend(LPVOID param)
{
}