Вы правы: выберите () время ожидания, потому что буфер отправки заполнен.
Поскольку протокол TCP гарантирует доставку, данные не будут удалены из буфера отправки, пока отправитель не узнает , что он благополучно приземлился в буфере приема на другом конце сокета.
Это означает, что буфер отправки заполняется, например, когда принимающая сторона имеет полный приемный буфер или когда отправленные пакеты (или ACK от получателя) теряются в сети.
Даже когда select () делает не тайм-аут, буфер отправки может быть почти заполнен, и тогда ваш вызов write () не запишет все ваши данные в буфер , Всегда проверяйте возвращаемое значение вашего вызова write () или send () - это дает количество фактически записанных байтов