DataArrival event not firing in Winsock control
Posted on 2004-10-08
I have a program that receives datagrams and displays the contents to a flexgrid and/or a text file. For the most part, when data arrives the DataArrival event for the winsock control does its job and thus the flexgrid and/or file gets updated.
However, after running the program for a while the flexgrid no longer gets updated. Data is still being sent to my program however (I can check this with a network sniffer), but it seems that the DataArrival event is not firing. If I click on a completely unrelated section of my GUI that brings up a popup window prompting me I have to do something else, and I click the 'ok' button, then lo and behold all (or most?) of the data that I've been expecting gets updated on the flexgrid and/or file. After this occurs the program runs ok for a while, but it is inevitable that this problem will occur again. The time interval at which this problem occurs is completely and utterly random. It can occur a second after I start receiving data or maybe even a minute afterwards.
It almost seems that the DataArrival event has to be reminded every now and then what it is supposed to be doing by firing off a different, completely unrelated event.
- No errors occur when the flexgrid/file fails to immediately be updated. the program just seems to be waiting for something to happen, but in the background it seems the receive buffer is still filling up because when I cause a completely unrelated event to occur, the dataArrival event will then behave properly and the backlog of data will be displayed.
- I am making sure that I receive all the data on a DataArrival event by utilising the number of bytes received (I noticed a MS article that said if the whole socket buffer was not emptied then the dataArrival event may not fire).
- I'm receiving data at quite a quick pace; every 30ms or so. However, CPU usage hovers around 3 or 4%.