Bruno, In the description for MHD_create_response_from_fd_at_offset in the libmicrohttpd manual ( http://www.gnu.org/software/libmicrohttpd/microhttpd.html#microhttpd_002dresponses) it states that
> Depending on your platform, MHD is likely to have been compiled with > support for 64-bit files. When you compile your own application, you must > make sure that off_t is also a 64-bit value It also provides suggestions on what you can do to make sure that your application compiles with the proper off_t size. Some browsers have issues with data more than 4GB, and will simply close the TCP connection. On Sat, May 19, 2012 at 6:11 AM, Bruno Knittel <[email protected]> wrote: > Hi Everyone, > > I'm new to libmicrohttpd and I'm having an issue I don't know at all how > to start troubleshooting it. > I want to answer an HTTP GET request with the content of a file that is in > the same directory as my executable. > > I'm using the function MHD_create_response_from_fd_at_offset to create the > MHD_Response. > I already checked the file descriptor and the size information I'm passing > to this function and it is fine. > I also checked that reading the whole content of the file using the read > function works. > > However my request is not answered (at least the page does not load in the > browser) and the following is > written to stderr: "Closing connection (stream error)". > At the end of this message you will find an extract of my code. > > Do you have some hints about what is going wrong here? > Or ideas how I can troubleshoot this? > > Many thanks in advance for your help ! > > My Code: > > int main() > { > // Start the web server > unsigned int flags = MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG; > > webDaemon = MHD_start_daemon (flags, > 80, > NULL, // No access > policy handler: connections from any client are allowed > NULL, > &answer_to_connection, // Access > handler: answers to requests > NULL, > MHD_OPTION_CONNECTION_TIMEOUT, > (unsigned int) 120, > MHD_OPTION_END); > > } > > int answer_to_connection(void *cls, > struct MHD_Connection *connection, > const char *url, > const char *method, > const char *version, > const char *upload_data, > size_t *upload_data_size, > void **ptr) > { > struct MHD_Response *response = > createMhdResponseForFile("index.html", "text/html"); > if (response == NULL) > { > // TODO Create default HTTP 404 Page > } > > Int ret = MHD_queue_response(connection, httpStatusCode, response); > MHD_destroy_response(response); > return ret; > > } > > > MHD_Response* createMhdResponseForFile(const char* path, const char* mime) > { > struct stat fileStats; > > int fileDescriptor = open(path, O_RDONLY); > if (fileDescriptor < 0) > { > return NULL; > } > > if (fstat(fileDescriptor, &fileStats) != 0) > { > if (close(fileDescriptor) != 0) > { > // TODO Some logging > } > > return NULL; > } > > MHD_Response* result = > MHD_create_response_from_fd_at_offset(fileStats.st_size, > > fileDescriptor, > > 0); > MHD_add_response_header(result, "Content-Type", mime); > > return result; > } > > > Bruno Knittel > [email protected] > > > >
