Значение 2, в примере выше, не подтверждает доставку. Мы можем потерять данные навсегда.
Я не знал о SIOCOUTQ. Думаю, это решит проблему, если данные терять нельзя.
Есть мысль, что это компромисс на который разработчики ядра идут, позволяя буферизировать данные и таким образом считая их отправленными (write возвращает 2).
Это позволяет значительно ускорить передачу и только в таких редких случаях, см. пример выше, потерять данные размером не выше буфера TCP сокета.