The thing is that the empeg is apparently setting TCP_NODELAY on the connection socket. This is fine if all you're doing is small data transfers. But it degrades performance horribly for large file transfers.

Think 100 system calls instead of 1 to receive 1 packet of 16k.


The only effect of TCP_NODELAY on large file transfers, is that the final packet of the eleven needed to transfer 16K of data, is emitted immediately rather than hanging around in case there's a subsequent packet that can be coalesced with it.

The player always writes the response to a ReadFID command using a single write() call for both packet header and data; it always reads from the data socket into a 64Kbyte buffer. I don't know what 100 system calls you might be thinking of.

Peter