Я пытаюсь отправить файл в определенный сокет, используя C; вот код:
int send_file(char *filepath,int sock)
{
FILE *fp=fopen(filepath,"rb");
void *buff=malloc(2000);
int i=1;
while(i)
{
int bytes_read=fread(buff,1,2000,fp);
i=!(feof(fp));
int bytes_sent=0;
while(bytes_sent<bytes_read)
{
int n=send(sock,buff+bytes_sent,bytes_read-bytes_sent,0);
if(n==-1)
return -1; //failure
bytes_sent+=n;
}
}
fclose(fp);
free(buff);
return 0;
}
Когда я запускаю эту программу и пытаюсь просмотреть текстовый файл в Firefox со значением http://127.0.0.1:8080/, часть файла обрезается с конца, если размер файла превышает 2000 байтов. Если я отправляю картинку, загружается только 3/4 картинки (обрезается снизу).
Функция всегда возвращает 0 вызывающей стороне. Куда исчезает последний кусок байтов, которые он отправляет ()? Нужно ли сбрасывать поток перед возвратом?
Спасибо
EDIT:
Это фрагмент моей функции main ():
send_file(filepath, sock);
close(sock);
return 0;
}