I've been using ICS for quite a while now, and a few days ago I came 
across something strange.
One of our larger customers had some extra modules installed, causing a 
lot of more tcp clients connecting to the tcp server.

Every now and then (somewhere between 1 minute and 3 hours) the tcp 
server would get up to 100% cpu utilization out of the blue.
After some searching we discovered that this was caused by the 
OnDataAvailable event for one of the connected clients being
called continuously.

Searching the ICS mailinglist archive a found this article 
http://marc.info/?l=twsocket&m=119628217011905&w=2 which pointed me
in the direction of the wsoNoReceiveLoop option. We've added this option 
to the client sockets and the problem is gone.

Now the mystery:
If I understood correct, you can get an endless loop if you don't read 
all received data in the OnDataAvailable event. The event will
keep being fired until all data is read, unless you add wsoNoReceiveLoop.

The thing is that we _always_ call ReceiveStr() in the OnDataAvailable 
event, I think this should always read all data received.
Is this a bug in ReceiveStr() or a bug regarding wsoNoReceiveLoop? Or is 
it just me not fully grasping it?
I'd really like an explanation why things start working now, so I am 
sure the problem is really solved.

thanks and regards,

Merijn Bosma

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

Reply via email to