Сервер, на котором я работаю (это многопоточный неблочный сервер сокетов Unix C), должен получить файл от клиента и передать его всем остальным клиентам, подключенным к серверу.
Все работает за исключением того, что мне трудно определить, когда передача файла завершена ..., так как я использую неблочный сокет, у меня возникает проблема, которая иногда при передаче файла recv возвращает -1 (что я предполагалось, что это конец файла), затем при следующем проходе появляется больше байтов.
Я пытаюсь все это взломать, поставив "END" в конце потока. Однако иногда, когда несколько файлов отправляются подряд, «END» является частью того же буфера recv, что и начало следующего файла. Или, что еще хуже, иногда я получаю буфер, заканчивающийся EN, и на следующем проходе приходит D.
Каков наилучший подход, чтобы избежать ситуаций, упомянутых выше, я действительно не хочу, чтобы каждый раз, когда я получаю несколько байтов из цикла сокета, весь накопленный буфер проверял, является ли «END» его частью, а затем обрезался соответствующим образом ... Я уверен, что есть лучшее решение этого права?
Заранее спасибо!