为什么FD_READ事件会比FD_CLOSE 事件多出来,请高手指点,谢了先!
void CListenSocket::OnAccept(int nErrorCode)
{
SOCKADDR asock;
int length=sizeof(SOCKADDR);
memset(&asock,0,sizeof(SOCKADDR));
if (nErrorCode == 0)
{
if (CReceiveSocket::SocketsCount >= MAX_RECV_SOCKET_NUM)
{
CAsyncSocket RejectionSocket;
string strMsg = "Too many connections, try again later.";
Accept(RejectionSocket);
RejectionSocket.Send(strMsg.c_str(), strMsg.length());
RejectionSocket.Close();
}
else
{
CReceiveSocket *pReceiveSocket = CReceiveSocket::Create();
if(Accept(*pReceiveSocket,&asock,&length))
{
AsyncSelect(FD_READ|FD_ACCEPT|FD_CLOSE);
}
}
}
}
///
void CReceiveSocket::OnClose(int nErrorCode)
{
char ss[10];
Close();
delete this;
SocketsCount--;
CloseCount++;
}
我现在的问题是程序接收数据一段时间后,Receive Socket不工作了,经调试发现CReceiveSocket::SocketsCount >MAX_RECV_SOCKET_NUM,我的FD_CLOSE事件竟然比FD_ACCEPT实践少MAX_RECV_SOCKET_NUM,这是为什么,有什么方法避免,高手指点一下???