}
*/
+void ShutDownCLient(AsyncIO *IO)
+{
+ event_del(&IO->send_event);
+ event_del(&IO->recv_event);
+ IO->Terminate(IO->Data);
+
+// citthread_mutex_lock(&EventQueueMutex);
+
+///QueueEvents /// todo remove from hash.
+
+// citthread_mutex_unlock(&EventQueueMutex);
+}
+
eReadState HandleInbound(AsyncIO *IO)
{
eReadState Finished = eBufferNotEmpty;
}
else if ((IO->NextState == eTerminateConnection) ||
(IO->NextState == eAbort) )
-{
-
-
- }
+ ShutDownCLient(IO);
return Finished;
}
break;
case eSendMore:
IO->NextState = IO->SendDone(IO->Data);
- event_add(&IO->send_event, NULL);
+
+ if ((IO->NextState == eTerminateConnection) ||
+ (IO->NextState == eAbort) )
+ ShutDownCLient(IO);
+ else
+ event_add(&IO->send_event, NULL);
break;
case eReadMessage:
if (StrBufCheckBuffer(&IO->RecvBuf) == eBufferNotEmpty) {
void *pData,
IO_CallBack ReadDone,
IO_CallBack SendDone,
+ IO_CallBack Terminate,
IO_LineReaderCallback LineReader,
int ReadFirst)
{
IO->Data = pData;
IO->SendDone = SendDone;
IO->ReadDone = ReadDone;
+ IO->Terminate = Terminate;
IO->LineReader = LineReader;
event_set(&IO->recv_event,