Есть несколько проблем с вашим кодом, которые могут вызвать это.
Наиболее вероятная причина заключается в следующем:
if(bytes_read < MAXSIZE)
break;
Это завершает цикл, когда read
возвращает меньше запрашиваемого количества байтов.Это, однако, совершенно нормальное поведение, и может произойти, например.когда во время вызова read
доступно недостаточно байтов (в конце концов, это чтение из сетевого сокета).Просто позвольте циклу продолжаться до тех пор, пока read
вернет значение> 0
(при условии, что сокет является блокирующим сокетом - если нет, вам также придется проверить на EAGAIN
и EWOULDBLOCK
).
Кроме того, если файл, который вы получаете, содержит двоичные данные, то не рекомендуется использовать fprintf
с "%s"
для записи в целевой файл.Это прекратит запись, как только найдет байт '\0'
(что не редкость в двоичных данных).Вместо этого используйте fwrite
.
Даже если вы получаете текст (предложенный расширением html-файла), все равно не стоит использовать fprintf
с "%s"
,поскольку полученные данные не будут '\0'
прекращены.