I ran some tests with UDP sendto() and TCP send() under heavy
traffic.
Even though the tests were on Windows Vista using Winsock 2.2,
only the standard BSD socket functions were used.
All sockets were non-blocking.

I noticed that when sendto/send fail with error code WSAENOBUFS
(insufficient buffer space or full queue), or WSAEWOULDBLOCK
(non-blocking socket operation could not be completed immediately)
then the corresponding datagram or packet was transmitted anyway
and the remote client received it.

Is it expected?

I assumed sendto/send failing with return value < 0 and any
error code do not send any data.