64,637
社区成员
发帖
与我相关
我的任务
分享
bool MyNetMsgReceiver::onRecviveUdpMsg(UdpSocket* sock, char* msg, int length, sockaddr_in* fromAddr)
{
//DWORD temp[16] = {0};
ULONG data = sock->getUserData();
if (!data) return true;
if ((DWORD)msg < 0x1000)
{
__asm int 3h; //在这里的时候msg的值还是正常的
}
IMAccount* acc = g_ImAccMgr.getAccountObject(data);
if ((DWORD)msg < 0x1000)
{
__asm int 3h; //程序停在这里,此时mag的值被修改为0x10, 变成了一个错的指针
}
if (acc)
{
acc->handleUdpPacket(sock, msg, length, fromAddr);
}
return true;
}
//g_ImAccMgr.getAccountObject() 的代码
IMAccount* IMAccountMgr::getAccountObject(size_t objId)
{
IMAccount* acc = NULL;
EnterCriticalSection(&mCs);
AccountIter it = tbl.begin();
for (; it != tbl.end(); ++it)
if ((*it)->getObjeciId() == objId)
{
acc = (*it);
break;
}
LeaveCriticalSection(&mCs);
return acc;
}
bool Connection::doSend()
{
if(sendBuf[0]->empty()) return false;
sendWsaBuf.buf = (char*)sendBuf[0]->c_str();
sendWsaBuf.len = sendBuf[0]->size();
DWORD sendBytes;
isSending = true;
int ret = WSASend(socket, &sendWsaBuf, 1, &sendBytes, 0, &sendOverLapped, sendResult);
if (ret == SOCKET_ERROR)
{
int error = WSAGetLastError();
if(error != WSA_IO_PENDING)
{//
isSending = false;
disConnect();
return false;
}
}
return true;
}