As Erik Ekman answered, the system will buffer some amount of data even if you don't read it dilligently.
After the buffer gets more and more filled, the receiver's TCP/IP implementation will reduce the advertised receive window size, causing the peer to send smaller chunks of data, effectively throttling the transfer. When the buffer is full, the window size drops to zero and the peer is allowed to send no additional data. Even if this happens, no data will be lost because the peer will resume sending the packets once the receive buffer is cleared.
A correct TCP/IP implementation guarantees that no data is just lost by skipping—a connection is either reliable and working or it is entirely lost, which is indicated by read
returning -1.