LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Эм, подхода действительно два но не те что ты указал. Точнее ты угадал один. read()/recv() по 1 байту - это не подход, это максимум временный костыль для черновика/прототипа.

Подхода два: либо перед началом строки передаётся длина и тогда её читать чуть проще, либо строка нуль-терминированная и без буферизации не вздумай в проде её читать. Хотя даже в первом варианте, с длиной заранее, буферизация желательна.

Единственное исключение: тебе надо прочитать какой-то заголовок, а потом отдать сокет другой проге, и нет никакой возможности передать ей уже предпрочитанный буфер с началом её данных. Тогда придётся по 1 байту, но это печаль.

но плох тем, что можно вычитать более одной строки и тогда вокруг данных после конца строки начинается пляска с бубном

Не начинается. Там всё элементарно и общепринято. Если тебя пугает - значит надо набираться опыта.

Исходная версия firkax, :

Эм, подхода действительно два но не те что ты указал. Точнее ты угадал один. read()/recv() по 1 байту - это не подход, это максимум временный костыль для чернивика/прототипа.

Подхода два: либо перед началом строки передаётся длина и тогда её читать чуть проще, либо строка нуль-терминированная и без буферизации не вздумай в проде её читать. Хотя даже в первом варианте, с длиной заранее, буферизация желательна.

Единственное исключение: тебе надо прочитать какой-то заголовок, а потом отдать сокет другой проге, и нет никакой возможности передать ей уже предпрочитанный буфер с началом её данных. Тогда придётся по 1 байту, но это печаль.

но плох тем, что можно вычитать более одной строки и тогда вокруг данных после конца строки начинается пляска с бубном

Не начинается. Там всё элементарно и общепринято. Если тебя пугает - значит надо набираться опыта.