コード例 #1
0
ファイル: asyncacceptor.cpp プロジェクト: ecilaz/ecila
bool_t AsyncAcceptor::AcceptEventHandler(AsyncSession *sess)
{
	bool_t ret = FALSE;

	AsyncResultPool *act_pool = ActPool();
	if(!act_pool) { ECILA_TRACE(); return FALSE; }

	EventResult *evr = act_pool->Acquire();
	if(!evr) { ECILA_TRACE(); return FALSE; }

	RingBuffer *buffer = sess->RecvBuffer();
	if(!buffer) { ECILA_TRACE(); return FALSE; }

	evr->Event(EVENT_READ);
	evr->Handler(this);
	evr->AcceptHandler(sess);
	evr->Buffer((char_t*)buffer->GetInPtr(), buffer->Remain());

	ret = sock_.Accept((Socket *)sess->Handle(), evr->Buffer(), evr);
	if(!ret) { ECILA_TRACE(); return FALSE; }

	return TRUE;
}