this can fail (return false)
number of bytes, which were read should be probably sent too
there should be an easy way to read the whole file (e.g. TCPCommand::ReadAll or when size < 0)