We are using the sockets API. I agree, there could be an issue with the application not reading the data out of the stack. However, the application is complex and we did not write it, so I'll probably have to investigate this from the bottom up - hopefully I can poke around the stack to find out which sockets are backed up with data waiting to be read.
Is there an easy recipe to locate a socket in the stack that is backed up? A few pointers might be very helpful, we can probably follow our noses from there...