Index: filed.c ================================================================== --- filed.c +++ filed.c @@ -55,10 +55,11 @@ } range; } headers; }; /* Global variables */ +/** Open File cache **/ struct filed_fileinfo *filed_fileinfo_fdcache; unsigned int filed_fileinfo_fdcache_size = CACHE_SIZE; /* Initialize process */ static int filed_init(void) { @@ -378,11 +379,11 @@ /* Handle a single request from a client */ static void filed_handle_client(int fd, struct filed_http_request *request) { struct filed_fileinfo *fileinfo; ssize_t sendfile_ret; - size_t sendfile_len; + size_t sendfile_len, sendfile_sent; off_t sendfile_offset; char *path; char *date_current, date_current_b[64]; int http_code; FILE *fp; @@ -398,12 +399,10 @@ return; } request = filed_get_http_request(fp, request); - fflush(fp); - path = request->path; filed_log_msg("PROCESS_REPLY_START FD=... PATH=... RANGE_START=... RANGE_LENGTH=..."); if (path == NULL) { @@ -470,17 +469,19 @@ filed_log_msg("SEND_START IFD=... OFD=... BYTES=..."); sendfile_offset = request->headers.range.offset; sendfile_len = request->headers.range.length; + sendfile_sent = 0; while (1) { sendfile_ret = sendfile(fd, fileinfo->fd, &sendfile_offset, sendfile_len); if (sendfile_ret <= 0) { break; } sendfile_len -= sendfile_ret; + sendfile_sent += sendfile_ret; if (sendfile_len == 0) { break; } }