If the receiver is not reading as fast as the sender sends, then the sockets buffers fill up after a while.
When assuming a datagram socket type a blocking socket would block if the buffers are full and thus implicitly slow down the sender. With a non-blocking socket the sending of a message simply would fail and
EAGAIN would be returned as error by
send. Note that this is true only for unix domain sockets of type datagram. With UDP sockets the send will succeed and messages would simply be lost.
With a stream socket a partial message might be written, no matter if the socket is blocking or non-blocking. The sender needs to check how many bytes are actually written (return of
send) and make sure to send the remaining data later. With a non-blocking socket the
send also could fail completely with
EAGAIN, with a blocking socket it would instead block and wait for the receiver reading some data in order to have space again in the socket buffer.