BTW, this does this also mean all ICS components need a timeout?

Regards,

Gorkem

----- Original Message ----- 
From: "Francois Piette" <[EMAIL PROTECTED]>
To: "ICS support mailing" <twsocket@elists.org>
Sent: Wednesday, March 14, 2007 12:13 PM
Subject: Re: [twsocket] Bug in MT THttpConnection close logic


>> For some reason sometimes with slow/WAN connections, when clients are
>> remote, this code does not work and the client object is "hung",
> eventually
>> filling the maximum number of connections.
>
> Calling Shutdown will initiate the TCP session shutdown, that is breaking
> cleanly the connection. But if for some reason the other party doesn't
> receive the shudown request, the connection will stay there forever. You
> should probably implement a timeout feature. If you called Shutdown and
> don't get the sessionc closed gracefully within some time, then you should
> abort the connection.
>
> --
> [EMAIL PROTECTED]
> Author of ICS (Internet Component Suite, freeware)
> Author of MidWare (Multi-tier framework, freeware)
> http://www.overbyte.be
>
> ----- Original Message ----- 
> From: "Fastream Technologies" <[EMAIL PROTECTED]>
> To: "ICS support mailing" <twsocket@elists.org>
> Sent: Wednesday, March 14, 2007 8:28 AM
> Subject: [twsocket] Bug in MT THttpConnection close logic
>
>
>> Hello,
>>
>> I have a modified THttpServer called THttpMTServer. In thic component,
> there
>> are worker threads which are pooled and connection objects
>> (THttpMTConnection) which are also pooled. I have the following code
> called
>> from ConnectionDataSent:
>>
>> void __fastcall httpServerClientClass::ConnectionDataSent(TObject 
>> *Sender,
>> WORD Error)
>> {
>>  if(!FDocStream)
>>   return;
>>
>>  if(DataSent >= DataToBeSent || Error)
>>  {
>>   this->Error = Error;
>>
>>   endOfResponse();
>>
>>   return;
>>  }
>>
>> ...
>>
>> Now in endOfResponse():
>>
>> void __fastcall httpServerClientClass::endOfResponse(void)
>> {
>>  if(CGIISAPIInAction)
>>  {
>>   scheduledToDestroy = true;
>>   return;
>>  }
>>
>>  if(responseEnded)
>>   return;
>>
>>  responseEnded = true;
>> ...
>>
>> if(FSessionClosedFlag)
>>  {
>>   if(pendingHeaderAvailable && availableDataBufferLen <= 2)
>>   {
>>    pendingHeaderAvailable = false;
>>    availableDataBufferLen = 0;
>>    availableDataBuffer.SetLength(0);
>>   }
>>  }
>>  else if(!KeepAlive || Error)
>>   Shutdown(1);
>>  }
>>
>> Also in OnClientDisconnected:
>>
>> void __fastcall httpServerThread::HTTPServerClientDisconnected(TObject
>> *Sender, TObject *Client, WORD Error)
>> {
>>  httpServerClientClass *clientObject = (httpServerClientClass*)Client;
>>
>> ...
>>
>>  clientObject->Error = Error;
>>
>>  clientObject->endOfResponse();
>>  clientObject->beginDetach();
>> }
>>
> //--------------------------------------------------------------------------
> -
>>
>> and in beginDetach():
>>
>> void __fastcall httpServerClientClass::beginDetach(void)
>> {
>>  if(CGIISAPIInAction)
>>  {
>>   scheduledToDestroy = true;
>>   return;
>>  }
>>
>>  if(!detachBegan)
>>  {
>>   detachBegan = true;
>>
>>   while(!PostThreadMessage(affinityThread->ThreadID,
>> WM_HTTP_CLIENT_THREAD_DETACH, (WPARAM)this, 0))
>>    ::Sleep(1);
>>  }
>> }
>>
> //--------------------------------------------------------------------------
> -
>>
>> For some reason sometimes with slow/WAN connections, when clients are
>> remote, this code does not work and the client object is "hung",
> eventually
>> filling the maximum number of connections. I have a strong feeling that
>> under some circumstances, the OnClientDisconnected is not being called. 
>> Or
>> maybe there is something else wrong. (BTW, the flags such as detachBegan
> are
>> correctly reset after each THREAD_ATTACH.)
>>
>> BR,
>>
>> Gorkem
>>
>> -- 
>> To unsubscribe or change your settings for TWSocket mailing list
>> please goto http://www.elists.org/mailman/listinfo/twsocket
>> Visit our website at http://www.overbyte.be
>
> -- 
> To unsubscribe or change your settings for TWSocket mailing list
> please goto http://www.elists.org/mailman/listinfo/twsocket
> Visit our website at http://www.overbyte.be 

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to