예제 #1
0
/*................无用...............*/
BOOL CWorkThread::Accept(CListenSocket& ListenSocket)
{
	CAsyncSocket asAccept;
	if(!ListenSocket.Accept(asAccept))
		return FALSE;

	CString strOut;
	strOut.Format(_T("CPoolThread::Accept() socket :%d Accept!\n"),asAccept.m_hSocket);
	TRACE(strOut);
	
	//线程池是否已满
	if(!WorkItem::IsPoolFull())
	{
		if(fpQueueUserWorkItem != NULL)
		{
			//
			fpQueueUserWorkItem(WorkItem::ClientWorkItemThread, (LPVOID)asAccept.Detach(), WT_EXECUTELONGFUNCTION);
		}
		else
		{
			//启动WorkItem类的ClientWorkThread线程
			AfxBeginThread(WorkItem::ClientWorkThread, (LPVOID)asAccept.Detach());
		}
	}
	else
	{
		// refuse request,close socket!拒绝客户端请求,关闭socket
		asAccept.Close();
	}

	return TRUE;
}
예제 #2
0
		DWORD		HandleEvent( DWORD mask ){
			SOCKADDR	SockAddr = {0};
			int	nLen				= sizeof(SOCKADDR);
			CSocket	sock	= m_ListenSock.Accept(SockAddr, nLen);

			CSession* pSession	= SESSIONS::New( sock, mask, new Connection );
			if( pSession )
			{
				SESSIONS::Delete( *pSession );
			}
			return 0;
		}