64,654
社区成员
发帖
与我相关
我的任务
分享
NetCore_IsErrorOccur = FALSE;
struct sockaddr_in st_ClientAddr;
socklen_t nLenAddr = sizeof(st_ClientAddr);
NETCORE_TCPEPOLL_CLIENT st_EPollClient;
TCHAR tszClientAddr[64];
memset(tszClientAddr,'\0',64);
memset(&st_ClientAddr,'\0',sizeof(st_ClientAddr));
memset(&st_EPollClient,'\0',sizeof(st_EPollClient));
SOCKET m_AccpetSocket = accept(hSocket,(struct sockaddr *)&st_ClientAddr,&nLenAddr);
if (SOCKET_ERROR == m_AccpetSocket)
{
NetCore_IsErrorOccur = TRUE;
NetCore_dwErrorCode = ERROR_NETENGINE_NETCORE_TCP_EPOLL_ACCEPT_ISFAILED;
return FALSE;
}
if (!m_NetSocket.NetCore_Socket_SetNoneBlock(m_AccpetSocket))
{
return FALSE;
}
m_NetSocket.NetCore_Socket_KeepAlive(m_AccpetSocket);
struct epoll_event st_ePollSocket;
memset(&st_ePollSocket,'\0',sizeof(st_ePollSocket));
if (bIsCtrl)
{
st_ePollSocket.events = EPOLLIN | EPOLLOUT | EPOLLET;
}
else
{
st_ePollSocket.events = EPOLLIN | EPOLLOUT | EPOLLET | EPOLLRDHUP | EPOLLERR;
}
st_ePollSocket.data.fd = m_AccpetSocket;
if (bIsCtrl)
{
if (-1 == epoll_ctl(m_CtrlEPoll,EPOLL_CTL_ADD,m_AccpetSocket,&st_ePollSocket))
{
close(m_AccpetSocket);
NetCore_IsErrorOccur = TRUE;
NetCore_dwErrorCode = ERROR_NETENGINE_NETCORE_TCP_EPOLL_ACCEPT_ADDCTL;
return FALSE;
}
}
else
{
if (-1 == epoll_ctl(m_DataEPoll,EPOLL_CTL_ADD,m_AccpetSocket,&st_ePollSocket))
{
close(m_AccpetSocket);
NetCore_IsErrorOccur = TRUE;
NetCore_dwErrorCode = ERROR_NETENGINE_NETCORE_TCP_EPOLL_ACCEPT_ADDCTL;
return FALSE;
}
}
pthread_mutex_init(&st_EPollClient.st_csWrite,NULL);
pthread_mutex_lock(&st_EPollClient.st_csWrite);
st_EPollClient.m_Socket = m_AccpetSocket;
st_EPollClient.bIsCtrl = bIsCtrl;
st_EPollClient.lParam = this;
_stnprintf_s(tszClientAddr,sizeof(tszClientAddr),_T("%s:%d"),inet_ntoa(st_ClientAddr.sin_addr),ntohs(st_ClientAddr.sin_port));
stl_MapClient.insert(make_pair(tszClientAddr,st_EPollClient)); //死在这里
list<NETCORE_TCPEPOLL_SENDMSG> stl_ListSendMsg;
stl_MapSendMsg.insert(make_pair(st_EPollClient.m_Socket,stl_ListSendMsg));
map<tstring,NETCORE_TCPEPOLL_CLIENT>::iterator stl_MapIterator = stl_MapClient.find(tszClientAddr);
pthread_mutex_unlock(&stl_MapIterator->second.st_csWrite);
lpCall_ePoll_Login(tszClientAddr,bIsCtrl,m_lPLogin);
return TRUE;
#0 0x0629f8c6 in std::_Rb_tree_insert_and_rebalance () from /usr/lib/libstdc++.so.6
(gdb) bt
#0 0x0629f8c6 in std::_Rb_tree_insert_and_rebalance () from /usr/lib/libstdc++.so.6
#1 0x0068a8d8 in std::_Rb_tree<std::string, std::pair<std::string const, tag_NetCore_TCPEPoll_Client>, std::_Select1st<std::pair<std::string const, tag_NetCore_TCPEPoll_Client> >, std::less<std::string>, std::allocator<std::pair<std::string const, tag_NetCore_TCPEPoll_Client> > >::_M_insert (this=0x68d690, __x=0x0, __p=0x997a580,
__v=@0xab1af198) at /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_tree.h:821
#2 0x0068aaa8 in std::_Rb_tree<std::string, std::pair<std::string const, tag_NetCore_TCPEPoll_Client>, std::_Select1st<std::pair<std::string const, tag_NetCore_TCPEPoll_Client> >, std::less<std::string>, std::allocator<std::pair<std::string const, tag_NetCore_TCPEPoll_Client> > >::insert_unique (this=0x68d690, __v=@0xab1af198)
at /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_tree.h:931
#3 0x0068ab1c in std::map<std::string, tag_NetCore_TCPEPoll_Client, std::less<std::string>, std::allocator<std::pair<std::string const, tag_NetCore_TCPEPoll_Client> > >::insert (this=0x68d690, __x=@0xab1af198) at /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h:396
#4 0x00686d81 in CNetCore_TCPEPoll::NetCore_TCPEPoll_AcceptClient (this=0x68d620, hSocket=16, bIsCtrl=false) at ./NetCore_ePoll/Socket_ePoll.cpp:614
#5 0x006874f4 in CNetCore_TCPEPoll::NetCore_Thread_DataAccept (lParam=0x68d620) at ./NetCore_ePoll/Socket_ePoll.cpp:922
#6 0x00b165ab in start_thread () from /lib/libpthread.so.0
#7 0x00a7bcfe in clone () from /lib/libc.so.6