..
Recap, with more info:
The host system is running 2.6.25-rc8-git. It uses netkit-ftp to
send a file to the remote system. Using strace shows that the
entire file was read, and passed to write() for the outbound socket.
The remote system is running linux-2.2.xx, and is reporting -EPIPE
from net/socket.c::sock_recvmsg() before all of the data has been received,
and thus ends up with a short file, missing data at the end.
This exact sequence, with the exact same software,
works fine when the host system is NOT running 2.6.25-*,
(eg. 2.6.11 through 2.6.24 are fine).
Something may be broken here.
--