libmicrohttpd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [libmicrohttpd] largepost.c reset connection when file already exist


From: Vitaliy T
Subject: Re: [libmicrohttpd] largepost.c reset connection when file already exists
Date: Sat, 11 Mar 2017 17:39:08 +0300

Still there is an issue with re-open a file. Patch applied below to avoid it.

Also iterate_post() always returns MHD_OK, because the app's logic driven
from the value of con_info->answercode().
And in case if fwrite() fails we also update the answer code & page  and
MHD_post_process() overwrite them (fileioerror becomes postprocerror).
May be I am wrong here, but I see this in this way.

Offtopic:
Are there plans to "say" libmicrohttpd to "clear" network buffers when
something goes wrong and we are ready to send a response?

Currently, my fears about reading the whole request was confirmed
(in case of largepost.c the answer_to_connection() function will be
called as many times as needed).


diff --git a/doc/examples/largepost.c b/doc/examples/largepost.c
index 6846a536..3fa8efa6 100644
--- a/doc/examples/largepost.c
+++ b/doc/examples/largepost.c
@@ -138,6 +138,9 @@ iterate_post (void *coninfo_cls,

   if (! con_info->fp)
     {
+      if (0 != con_info->answercode) /* something went wrong */
+          return MHD_YES;
+
       if (NULL != (fp = fopen (filename, "rb")))
         {
           fclose (fp);
@@ -161,7 +164,7 @@ iterate_post (void *coninfo_cls,
         {
           con_info->answerstring = fileioerror;
           con_info->answercode = MHD_HTTP_INTERNAL_SERVER_ERROR;
-          return MHD_NO;
+          return MHD_YES;
         }
     }

@@ -324,8 +327,10 @@ main ()
                              &answer_to_connection, NULL,
                              MHD_OPTION_NOTIFY_COMPLETED,
&request_completed, NULL,
                              MHD_OPTION_END);
-  if (NULL == daemon)
+  if (NULL == daemon) {
+    fprintf (stderr, "failed to start daemon\n");
     return 1;
+  }
   (void) getchar ();
   MHD_stop_daemon (daemon);
   return 0;

Thanks!

-- 
With Best Regards,
Vitaliy V. Tokarev



reply via email to

[Prev in Thread] Current Thread [Next in Thread]