>>Hmm, in the limited work I've done with comms ISTR it's common practice to use buffering, where you let X bytes or kilobytes accumulate, then process. Requiring the listener to handle incoming bytes individually in real-time can expose you to (as you point out) GC, or OS or even (in your case) VM context switching.
Because VFP doesn't handle chr(0) very well it needs to be byte by byte.
>>There is also a 16MB size limit for a memvar (and presumably object property). Do you get any messages approaching that size?
Yep- but it's also documented that variables can get up to >600Mb if you're just adding to the same variable, but you can't assign it to a new variable. Still another good reason to refactor.
"... They ne'er cared for us
yet: suffer us to famish, and their store-houses
crammed with grain; make edicts for usury, to
support usurers; repeal daily any wholesome act
established against the rich, and provide more
piercing statutes daily, to chain up and restrain
the poor. If the wars eat us not up, they will; and
there's all the love they bear us."
-- Shakespeare: Coriolanus, Act 1, scene 1