Кажется, я нашел решение. По крайней мере, в Linux, если для SO_SNDBUF установлено значение 0, кажется, что он ожидает каждую транзакцию, прежде чем разрешить следующую передачу. Хотя он немедленно вернется, он не сможет разрешить другую отправку, пока предыдущая отправка не будет отправлена. Я не пытался использовать select (...), чтобы определить, были ли отправлены данные.
Это работает на моем ядре Linux 3.8, и я уверен, что оно работает в другом месте.