Я работаю над клиент-серверным приложением. Мое приложение работает с переменными размерами пакетов, каждый пакет имеет заголовок и полезную нагрузку переменной длины.Recv ring buffer vs simple buffer
Моя дилемма - это лучший способ передачи пакетов при выполнении recv. Большинство учебных пособий, с которыми я столкнулся, предлагают использовать кольцевой буфер, но насколько я могу судить, более эффективно использовать буфер, размер которого в два раза превышает размер самого большого пакета, который вы можете обрабатывать.
Если я использую кольцевой буфер мне нужен дополнительный буфер для RECV, а затем мне нужно скопировать буфер в кольцевом буфере, который означает, что мне нужно сделать один или два memcpys для вставки буфера в кольцевом буфере
Если я использую подход с одним буфером, мне нужен только один буфер, который я могу передать на вызов recv и вызов memmove, чтобы переместить данные в начало буфера, когда я получил полный пакет, и все еще есть данные, принадлежащие другому пакету в буфер.
Я получаю что-то неправильно?
PS. Если вы можете указать мне на любой исходный код/пример, где обрабатываются пакеты с переменной длиной, которые были бы полезными.
Этот TCP или UDP? –
@KarolyHorvath это TCP –
почему голос? –