The implementation calls pgm_read_byte() to read every character. This is inefficient because it will read every block of 4 bytes multiple times.
It calls calls write(c) for every character. This is very inefficient at the network level if TCP_NODELAY is turned on because suddenly all flash strings are sent out as one byte per packet.
It should use strncpy_P() with a small buffer instead.