The standard method to send data on a stream socket has always been to call send with a chunk of data to write, check the return value to see if all data was sent and then k
The thing that is missing in above description is, in Unix, system calls might get interrupted with signals. That's exactly the reason blocking send(2) might return a short count.