Correctly read block of fixed size from the pipe.
Correctly read block of fixed size from the pipe.

Before this patch, the code was using io.Reader.Read(), which returns
whatever block of data is available on the pipe. If the client code
wrote into the pipe small chunk of data, Read() would return them
as-is. This meant that the code would send to the network blocks
smaller than the configured size, which the TFTP client would interpret
as file terminators.

By using io.ReadFull() we guarantee that we always read and fill a
full block of data, unless a EOF occurs. This fixes the transfer for
client code writing chunk of arbitrary size to the pipe.

pin/tftp