gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r6689 - libmicrohttpd/src/testzzuf


From: gnunet
Subject: [GNUnet-SVN] r6689 - libmicrohttpd/src/testzzuf
Date: Sat, 12 Apr 2008 22:32:13 -0600 (MDT)

Author: grothoff
Date: 2008-04-12 22:32:13 -0600 (Sat, 12 Apr 2008)
New Revision: 6689

Removed:
   libmicrohttpd/src/testzzuf/daemontest_post_loop.c
Modified:
   libmicrohttpd/src/testzzuf/Makefile.am
   libmicrohttpd/src/testzzuf/daemontest_get.c
   libmicrohttpd/src/testzzuf/daemontest_get_chunked.c
   libmicrohttpd/src/testzzuf/daemontest_large_put.c
   libmicrohttpd/src/testzzuf/daemontest_long_header.c
   libmicrohttpd/src/testzzuf/daemontest_post.c
   libmicrohttpd/src/testzzuf/daemontest_postform.c
   libmicrohttpd/src/testzzuf/daemontest_put.c
   libmicrohttpd/src/testzzuf/daemontest_put_chunked.c
   libmicrohttpd/src/testzzuf/socat.c
Log:
zzufing all tests

Modified: libmicrohttpd/src/testzzuf/Makefile.am
===================================================================
--- libmicrohttpd/src/testzzuf/Makefile.am      2008-04-13 04:07:43 UTC (rev 
6688)
+++ libmicrohttpd/src/testzzuf/Makefile.am      2008-04-13 04:32:13 UTC (rev 
6689)
@@ -8,13 +8,11 @@
   daemontest_get \
   daemontest_post \
   daemontest_postform \
-  daemontest_post_loop \
   daemontest_put \
   daemontest_large_put \
   daemontest_get11 \
   daemontest_post11 \
   daemontest_postform11 \
-  daemontest_post_loop11 \
   daemontest_put11 \
   daemontest_large_put11 \
   daemontest_long_header \
@@ -47,12 +45,6 @@
   $(top_builddir)/src/daemon/libmicrohttpd.la \
   @LIBCURL@ 
 
-daemontest_post_loop_SOURCES = \
-  daemontest_post_loop.c
-daemontest_post_loop_LDADD = \
-  $(top_builddir)/src/daemon/libmicrohttpd.la \
-  @LIBCURL@ 
-
 daemontest_put_SOURCES = \
   daemontest_put.c
 daemontest_put_LDADD = \
@@ -83,12 +75,6 @@
   $(top_builddir)/src/daemon/libmicrohttpd.la \
   @LIBCURL@ 
 
-daemontest_post_loop11_SOURCES = \
-  daemontest_post_loop.c
-daemontest_post_loop11_LDADD = \
-  $(top_builddir)/src/daemon/libmicrohttpd.la \
-  @LIBCURL@ 
-
 daemontest_put11_SOURCES = \
   daemontest_put.c
 daemontest_put11_LDADD = \

Modified: libmicrohttpd/src/testzzuf/daemontest_get.c
===================================================================
--- libmicrohttpd/src/testzzuf/daemontest_get.c 2008-04-13 04:07:43 UTC (rev 
6688)
+++ libmicrohttpd/src/testzzuf/daemontest_get.c 2008-04-13 04:32:13 UTC (rev 
6689)
@@ -218,7 +218,6 @@
   multi = curl_multi_init ();
   if (multi == NULL)
     {
-      curl_easy_cleanup (c);
       MHD_stop_daemon (d);
       return 512;
     }

Modified: libmicrohttpd/src/testzzuf/daemontest_get_chunked.c
===================================================================
--- libmicrohttpd/src/testzzuf/daemontest_get_chunked.c 2008-04-13 04:07:43 UTC 
(rev 6688)
+++ libmicrohttpd/src/testzzuf/daemontest_get_chunked.c 2008-04-13 04:32:13 UTC 
(rev 6689)
@@ -239,7 +239,6 @@
   multi = curl_multi_init ();
   if (multi == NULL)
     {
-      curl_easy_cleanup (c);
       MHD_stop_daemon (d);
       return 512;
     }

Modified: libmicrohttpd/src/testzzuf/daemontest_large_put.c
===================================================================
--- libmicrohttpd/src/testzzuf/daemontest_large_put.c   2008-04-13 04:07:43 UTC 
(rev 6688)
+++ libmicrohttpd/src/testzzuf/daemontest_large_put.c   2008-04-13 04:32:13 UTC 
(rev 6689)
@@ -19,7 +19,7 @@
 */
 
 /**
- * @file daemontest_put.c
+ * @file daemontest_large_put.c
  * @brief  Testcase for libmicrohttpd PUT operations
  * @author Christian Grothoff
  */
@@ -54,7 +54,7 @@
  * MHD default buffer limit and the test code is not
  * written for incremental upload processing...
  */
-#define PUT_SIZE (512 * 1024)
+#define PUT_SIZE (256 * 1024)
 
 static char *put_buffer;
 
@@ -123,7 +123,6 @@
         }
       else
         {
-          printf ("Invalid upload data!\n");
           return MHD_NO;
         }
       *done = 1;
@@ -151,8 +150,8 @@
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
-                        1080,
+  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
+                        11080,
                         NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
   if (d == NULL)
     return 1;
@@ -162,7 +161,7 @@
       fprintf (stderr, ".");
 
       c = curl_easy_init ();
-      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world";);
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world";);
       curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
       curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
       curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
@@ -184,6 +183,7 @@
       curl_easy_cleanup (c);
     }
   fprintf (stderr, "\n");
+  zzuf_socat_stop ();
   MHD_stop_daemon (d);
   return 0;
 }
@@ -202,14 +202,11 @@
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
+  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
                         11080,
                         NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
   if (d == NULL)
-    {
-      free (cbc.buf);
-      return 16;
-    }
+    return 16;
   zzuf_socat_start ();
   for (i = 0; i < LOOP_COUNT; i++)
     {
@@ -268,7 +265,7 @@
   cbc.size = 2048;
   cbc.pos = 0;
   multi = NULL;
-  d = MHD_start_daemon (MHD_NO_FLAG | MHD_USE_DEBUG,
+  d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ ,
                         11080,
                         NULL, NULL, &ahc_echo, &done_flag,
                         MHD_OPTION_CONNECTION_MEMORY_LIMIT,
@@ -278,7 +275,6 @@
   multi = curl_multi_init ();
   if (multi == NULL)
     {
-      curl_easy_cleanup (c);
       MHD_stop_daemon (d);
       return 512;
     }
@@ -319,7 +315,7 @@
           return 1024;
         }
       start = time (NULL);
-      while ((time (NULL) - start < 5) && (multi != NULL))
+      while ((time (NULL) - start < 5) && (c != NULL))
         {
           max = 0;
           FD_ZERO (&rs);

Modified: libmicrohttpd/src/testzzuf/daemontest_long_header.c
===================================================================
--- libmicrohttpd/src/testzzuf/daemontest_long_header.c 2008-04-13 04:07:43 UTC 
(rev 6688)
+++ libmicrohttpd/src/testzzuf/daemontest_long_header.c 2008-04-13 04:32:13 UTC 
(rev 6689)
@@ -1,6 +1,6 @@
 /*
      This file is part of libmicrohttpd
-     (C) 2007 Christian Grothoff
+     (C) 2007, 2008 Christian Grothoff
 
      libmicrohttpd is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -35,7 +35,19 @@
 #include <unistd.h>
 #endif
 
+#include "socat.c"
+
 /**
+ * A larger loop count will run more random tests --
+ * which would be good, except that it may take too
+ * long for most user's patience.  So this small
+ * value is the default.
+ */
+#define LOOP_COUNT 10
+
+#define CURL_TIMEOUT 50L
+
+/**
  * We will set the memory available per connection to
  * half of this value, so the actual value does not have
  * to be big at all...
@@ -94,13 +106,13 @@
   char buf[2048];
   struct CBC cbc;
   char *url;
-  long code;
+  int i;
 
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
   d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
-                        1080,
+                        11080,
                         &apc_all,
                         NULL,
                         &ahc_echo,
@@ -109,44 +121,39 @@
                         VERY_LONG / 2, MHD_OPTION_END);
   if (d == NULL)
     return 1;
-  c = curl_easy_init ();
-  url = malloc (VERY_LONG);
-  memset (url, 'a', VERY_LONG);
-  url[VERY_LONG - 1] = '\0';
-  memcpy (url, "http://localhost:1080/";, strlen ("http://localhost:1080/";));
-  curl_easy_setopt (c, CURLOPT_URL, url);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-  if (CURLE_OK == curl_easy_perform (c))
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
+      fprintf (stderr, ".");
+
+      c = curl_easy_init ();
+      url = malloc (VERY_LONG);
+      memset (url, 'a', VERY_LONG);
+      url[VERY_LONG - 1] = '\0';
+      memcpy (url, "http://localhost:11081/";,
+              strlen ("http://localhost:11081/";));
+      curl_easy_setopt (c, CURLOPT_URL, url);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+      curl_easy_perform (c);
       curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      free (url);
-      return 2;
     }
-  if (CURLE_OK != curl_easy_getinfo (c, CURLINFO_RESPONSE_CODE, &code))
-    {
-      curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      free (url);
-      return 4;
-    }
-  curl_easy_cleanup (c);
+  fprintf (stderr, "\n");
+  zzuf_socat_stop ();
+
   MHD_stop_daemon (d);
   free (url);
-  if (code != MHD_HTTP_REQUEST_URI_TOO_LONG)
-    return 8;
   return 0;
 }
 
@@ -159,8 +166,8 @@
   char buf[2048];
   struct CBC cbc;
   char *url;
-  long code;
   struct curl_slist *header = NULL;
+  int i;
 
   cbc.buf = buf;
   cbc.size = 2048;
@@ -175,51 +182,44 @@
                         VERY_LONG / 2, MHD_OPTION_END);
   if (d == NULL)
     return 16;
-  c = curl_easy_init ();
-  url = malloc (VERY_LONG);
-  memset (url, 'a', VERY_LONG);
-  url[VERY_LONG - 1] = '\0';
-  url[VERY_LONG / 2] = ':';
-  url[VERY_LONG / 2 + 1] = ':';
-  header = curl_slist_append (header, url);
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
+    {
+      fprintf (stderr, ".");
 
-  curl_easy_setopt (c, CURLOPT_HTTPHEADER, header);
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-  if (CURLE_OK == curl_easy_perform (c))
-    {
-      curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
+
+      c = curl_easy_init ();
+      url = malloc (VERY_LONG);
+      memset (url, 'a', VERY_LONG);
+      url[VERY_LONG - 1] = '\0';
+      url[VERY_LONG / 2] = ':';
+      url[VERY_LONG / 2 + 1] = ':';
+      header = curl_slist_append (header, url);
+
+      curl_easy_setopt (c, CURLOPT_HTTPHEADER, header);
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+      curl_easy_perform (c);
       curl_slist_free_all (header);
-      free (url);
-      return 32;
-    }
-  if (CURLE_OK != curl_easy_getinfo (c, CURLINFO_RESPONSE_CODE, &code))
-    {
-      curl_slist_free_all (header);
       curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      free (url);
-      return 64;
     }
-  curl_slist_free_all (header);
-  curl_easy_cleanup (c);
+  fprintf (stderr, "\n");
+  zzuf_socat_stop ();
+
   MHD_stop_daemon (d);
   free (url);
-  if (code != MHD_HTTP_REQUEST_ENTITY_TOO_LARGE)
-    return 128;
   return 0;
 }
 

Modified: libmicrohttpd/src/testzzuf/daemontest_post.c
===================================================================
--- libmicrohttpd/src/testzzuf/daemontest_post.c        2008-04-13 04:07:43 UTC 
(rev 6688)
+++ libmicrohttpd/src/testzzuf/daemontest_post.c        2008-04-13 04:32:13 UTC 
(rev 6689)
@@ -1,6 +1,6 @@
 /*
      This file is part of libmicrohttpd
-     (C) 2007 Christian Grothoff
+     (C) 2007, 2008 Christian Grothoff
 
      libmicrohttpd is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -35,6 +35,20 @@
 #include <unistd.h>
 #endif
 
+
+#include "socat.c"
+
+/**
+ * A larger loop count will run more random tests --
+ * which would be good, except that it may take too
+ * long for most user's patience.  So this small
+ * value is the default.
+ */
+#define LOOP_COUNT 10
+
+#define CURL_TIMEOUT 50L
+
+
 #define POST_DATA "name=daniel&project=curl"
 
 static int oneone;
@@ -99,7 +113,6 @@
 
   if (0 != strcmp ("POST", method))
     {
-      printf ("METHOD: %s\n", method);
       return MHD_NO;            /* unexpected method */
     }
   pp = *unused;
@@ -133,48 +146,45 @@
   CURL *c;
   char buf[2048];
   struct CBC cbc;
-  CURLcode errornum;
+  int i;
 
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
-                        1080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
+  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
+                        11080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
   if (d == NULL)
     return 1;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
-  curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
-  curl_easy_setopt (c, CURLOPT_POST, 1L);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-  if (CURLE_OK != (errornum = curl_easy_perform (c)))
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      fprintf (stderr,
-               "curl_easy_perform failed: `%s'\n",
-               curl_easy_strerror (errornum));
+      fprintf (stderr, ".");
+
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
+      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
+      curl_easy_setopt (c, CURLOPT_POST, 1L);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+      curl_easy_perform (c);
       curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      return 2;
     }
-  curl_easy_cleanup (c);
+  fprintf (stderr, "\n");
+  zzuf_socat_stop ();
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 4;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 8;
+
   return 0;
 }
 
@@ -185,48 +195,46 @@
   CURL *c;
   char buf[2048];
   struct CBC cbc;
-  CURLcode errornum;
+  int i;
 
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
-                        1081, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
+  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
+                        11080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
   if (d == NULL)
     return 16;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
-  curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
-  curl_easy_setopt (c, CURLOPT_POST, 1L);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-  if (CURLE_OK != (errornum = curl_easy_perform (c)))
+
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      fprintf (stderr,
-               "curl_easy_perform failed: `%s'\n",
-               curl_easy_strerror (errornum));
+      fprintf (stderr, ".");
+
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
+      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
+      curl_easy_setopt (c, CURLOPT_POST, 1L);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+      curl_easy_perform (c);
       curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      return 32;
     }
-  curl_easy_cleanup (c);
+  fprintf (stderr, "\n");
+  zzuf_socat_stop ();
+
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 64;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 128;
   return 0;
 }
 
@@ -245,114 +253,112 @@
   fd_set es;
   int max;
   int running;
-  struct CURLMsg *msg;
   time_t start;
   struct timeval tv;
+  int i;
 
   multi = NULL;
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_DEBUG,
+  d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ ,
                         1082, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
   if (d == NULL)
     return 256;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
-  curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
-  curl_easy_setopt (c, CURLOPT_POST, 1L);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-
-
   multi = curl_multi_init ();
   if (multi == NULL)
     {
-      curl_easy_cleanup (c);
       MHD_stop_daemon (d);
       return 512;
     }
-  mret = curl_multi_add_handle (multi, c);
-  if (mret != CURLM_OK)
+
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      curl_multi_cleanup (multi);
-      curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      return 1024;
-    }
-  start = time (NULL);
-  while ((time (NULL) - start < 5) && (multi != NULL))
-    {
-      max = 0;
-      FD_ZERO (&rs);
-      FD_ZERO (&ws);
-      FD_ZERO (&es);
-      curl_multi_perform (multi, &running);
-      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
+      fprintf (stderr, ".");
+
+
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
+      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
+      curl_easy_setopt (c, CURLOPT_POST, 1L);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+
+
+      mret = curl_multi_add_handle (multi, c);
       if (mret != CURLM_OK)
         {
-          curl_multi_remove_handle (multi, c);
           curl_multi_cleanup (multi);
           curl_easy_cleanup (c);
+          zzuf_socat_stop ();
           MHD_stop_daemon (d);
-          return 2048;
+          return 1024;
         }
-      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
+      start = time (NULL);
+      while ((time (NULL) - start < 5) && (c != NULL))
         {
-          curl_multi_remove_handle (multi, c);
-          curl_multi_cleanup (multi);
-          curl_easy_cleanup (c);
-          MHD_stop_daemon (d);
-          return 4096;
-        }
-      tv.tv_sec = 0;
-      tv.tv_usec = 1000;
-      select (max + 1, &rs, &ws, &es, &tv);
-      curl_multi_perform (multi, &running);
-      if (running == 0)
-        {
-          msg = curl_multi_info_read (multi, &running);
-          if (msg == NULL)
-            break;
-          if (msg->msg == CURLMSG_DONE)
+          max = 0;
+          FD_ZERO (&rs);
+          FD_ZERO (&ws);
+          FD_ZERO (&es);
+          curl_multi_perform (multi, &running);
+          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
+          if (mret != CURLM_OK)
             {
-              if (msg->data.result != CURLE_OK)
-                printf ("%s failed at %s:%d: `%s'\n",
-                        "curl_multi_perform",
-                        __FILE__,
-                        __LINE__, curl_easy_strerror (msg->data.result));
               curl_multi_remove_handle (multi, c);
               curl_multi_cleanup (multi);
               curl_easy_cleanup (c);
+              zzuf_socat_stop ();
+              MHD_stop_daemon (d);
+              return 2048;
+            }
+          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
+            {
+              curl_multi_remove_handle (multi, c);
+              curl_multi_cleanup (multi);
+              curl_easy_cleanup (c);
+              zzuf_socat_stop ();
+              MHD_stop_daemon (d);
+              return 4096;
+            }
+          tv.tv_sec = 0;
+          tv.tv_usec = 1000;
+          select (max + 1, &rs, &ws, &es, &tv);
+          curl_multi_perform (multi, &running);
+          if (running == 0)
+            {
+              curl_multi_info_read (multi, &running);
+              curl_multi_remove_handle (multi, c);
+              curl_easy_cleanup (c);
               c = NULL;
-              multi = NULL;
             }
+          MHD_run (d);
         }
-      MHD_run (d);
+      if (c != NULL)
+        {
+          curl_multi_remove_handle (multi, c);
+          curl_easy_cleanup (c);
+        }
+
     }
-  if (multi != NULL)
-    {
-      curl_multi_remove_handle (multi, c);
-      curl_easy_cleanup (c);
-      curl_multi_cleanup (multi);
-    }
+  fprintf (stderr, "\n");
+  curl_multi_cleanup (multi);
+  zzuf_socat_stop ();
+
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 8192;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 16384;
   return 0;
 }
 

Deleted: libmicrohttpd/src/testzzuf/daemontest_post_loop.c
===================================================================
--- libmicrohttpd/src/testzzuf/daemontest_post_loop.c   2008-04-13 04:07:43 UTC 
(rev 6688)
+++ libmicrohttpd/src/testzzuf/daemontest_post_loop.c   2008-04-13 04:32:13 UTC 
(rev 6689)
@@ -1,386 +0,0 @@
-/*
-     This file is part of libmicrohttpd
-     (C) 2007 Christian Grothoff
-
-     libmicrohttpd is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
-     option) any later version.
-
-     libmicrohttpd is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
-
-     You should have received a copy of the GNU General Public License
-     along with libmicrohttpd; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
-*/
-
-/**
- * @file daemontest_post_loop.c
- * @brief  Testcase for libmicrohttpd POST operations using URL-encoding
- * @author Christian Grothoff (inspired by bug report #1296)
- */
-
-#include "config.h"
-#include <curl/curl.h>
-#include <microhttpd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#ifndef WINDOWS
-#include <unistd.h>
-#endif
-
-#define POST_DATA "<?xml version='1.0' 
?>\n<xml>\n<data-id>1</data-id>\n</xml>\n"
-
-#define LOOPCOUNT 10
-
-static int oneone;
-
-struct CBC
-{
-  char *buf;
-  size_t pos;
-  size_t size;
-};
-
-static size_t
-copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
-{
-  struct CBC *cbc = ctx;
-
-  if (cbc->pos + size * nmemb > cbc->size)
-    return 0;                   /* overflow */
-  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
-  cbc->pos += size * nmemb;
-  return size * nmemb;
-}
-
-static int
-ahc_echo (void *cls,
-          struct MHD_Connection *connection,
-          const char *url,
-          const char *method,
-          const char *version,
-          const char *upload_data, unsigned int *upload_data_size,
-          void **mptr)
-{
-  static int marker;
-  struct MHD_Response *response;
-  int ret;
-
-  if (0 != strcmp ("POST", method))
-    {
-      printf ("METHOD: %s\n", method);
-      return MHD_NO;            /* unexpected method */
-    }
-  if ((*mptr != NULL) && (0 == *upload_data_size))
-    {
-      if (*mptr != &marker)
-        abort ();
-      response = MHD_create_response_from_data (2, "OK", MHD_NO, MHD_NO);
-      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
-      MHD_destroy_response (response);
-      *mptr = NULL;
-      return ret;
-    }
-  if (strlen (POST_DATA) != *upload_data_size)
-    return MHD_YES;
-  *upload_data_size = 0;
-  *mptr = &marker;
-  return MHD_YES;
-}
-
-
-static int
-testInternalPost ()
-{
-  struct MHD_Daemon *d;
-  CURL *c;
-  char buf[2048];
-  struct CBC cbc;
-  CURLcode errornum;
-  int i;
-  char url[1024];
-
-  cbc.buf = buf;
-  cbc.size = 2048;
-  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
-                        1080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
-  if (d == NULL)
-    return 1;
-  for (i = 0; i < LOOPCOUNT; i++)
-    {
-      if (99 == i % 100)
-        fprintf (stderr, ".");
-      c = curl_easy_init ();
-      cbc.pos = 0;
-      buf[0] = '\0';
-      sprintf (url, "http://localhost:1080/hw%d";, i);
-      curl_easy_setopt (c, CURLOPT_URL, url);
-      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
-      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
-      curl_easy_setopt (c, CURLOPT_POST, 1L);
-      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-      curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-      if (oneone)
-        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-      else
-        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-      // NOTE: use of CONNECTTIMEOUT without also
-      //   setting NOSIGNAL results in really weird
-      //   crashes on my system!
-      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-      if (CURLE_OK != (errornum = curl_easy_perform (c)))
-        {
-          fprintf (stderr,
-                   "curl_easy_perform failed: `%s'\n",
-                   curl_easy_strerror (errornum));
-          curl_easy_cleanup (c);
-          MHD_stop_daemon (d);
-          return 2;
-        }
-      curl_easy_cleanup (c);
-      if ((buf[0] != 'O') || (buf[1] != 'K'))
-        {
-          MHD_stop_daemon (d);
-          return 4;
-        }
-    }
-  MHD_stop_daemon (d);
-  if (LOOPCOUNT >= 99)
-    fprintf (stderr, "\n");
-  return 0;
-}
-
-static int
-testMultithreadedPost ()
-{
-  struct MHD_Daemon *d;
-  CURL *c;
-  char buf[2048];
-  struct CBC cbc;
-  CURLcode errornum;
-  int i;
-  char url[1024];
-
-  cbc.buf = buf;
-  cbc.size = 2048;
-  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
-                        1081, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
-  if (d == NULL)
-    return 16;
-  for (i = 0; i < LOOPCOUNT; i++)
-    {
-      if (99 == i % 100)
-        fprintf (stderr, ".");
-      c = curl_easy_init ();
-      cbc.pos = 0;
-      buf[0] = '\0';
-      sprintf (url, "http://localhost:1081/hw%d";, i);
-      curl_easy_setopt (c, CURLOPT_URL, url);
-      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
-      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
-      curl_easy_setopt (c, CURLOPT_POST, 1L);
-      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-      curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-      if (oneone)
-        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-      else
-        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-      // NOTE: use of CONNECTTIMEOUT without also
-      //   setting NOSIGNAL results in really weird
-      //   crashes on my system!
-      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-      if (CURLE_OK != (errornum = curl_easy_perform (c)))
-        {
-          fprintf (stderr,
-                   "curl_easy_perform failed: `%s'\n",
-                   curl_easy_strerror (errornum));
-          curl_easy_cleanup (c);
-          MHD_stop_daemon (d);
-          return 32;
-        }
-      curl_easy_cleanup (c);
-      if ((buf[0] != 'O') || (buf[1] != 'K'))
-        {
-          MHD_stop_daemon (d);
-          return 64;
-        }
-    }
-  MHD_stop_daemon (d);
-  if (LOOPCOUNT >= 99)
-    fprintf (stderr, "\n");
-  return 0;
-}
-
-
-static int
-testExternalPost ()
-{
-  struct MHD_Daemon *d;
-  CURL *c;
-  char buf[2048];
-  struct CBC cbc;
-  CURLM *multi;
-  CURLMcode mret;
-  fd_set rs;
-  fd_set ws;
-  fd_set es;
-  int max;
-  int running;
-  struct CURLMsg *msg;
-  time_t start;
-  struct timeval tv;
-  int i;
-  unsigned long long timeout;
-  long ctimeout;
-  char url[1024];
-
-  multi = NULL;
-  cbc.buf = buf;
-  cbc.size = 2048;
-  cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_DEBUG,
-                        1082, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
-  if (d == NULL)
-    return 256;
-  multi = curl_multi_init ();
-  if (multi == NULL)
-    {
-      MHD_stop_daemon (d);
-      return 512;
-    }
-  for (i = 0; i < LOOPCOUNT; i++)
-    {
-      fprintf (stderr, ".");
-      c = curl_easy_init ();
-      cbc.pos = 0;
-      buf[0] = '\0';
-      sprintf (url, "http://localhost:1082/hw%d";, i);
-      curl_easy_setopt (c, CURLOPT_URL, url);
-      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
-      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
-      curl_easy_setopt (c, CURLOPT_POST, 1L);
-      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-      curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-      if (oneone)
-        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-      else
-        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-      // NOTE: use of CONNECTTIMEOUT without also
-      //   setting NOSIGNAL results in really weird
-      //   crashes on my system!
-      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-      mret = curl_multi_add_handle (multi, c);
-      if (mret != CURLM_OK)
-        {
-          curl_multi_cleanup (multi);
-          curl_easy_cleanup (c);
-          MHD_stop_daemon (d);
-          return 1024;
-        }
-      start = time (NULL);
-      while ((time (NULL) - start < 5) && (multi != NULL))
-        {
-          max = 0;
-          FD_ZERO (&rs);
-          FD_ZERO (&ws);
-          FD_ZERO (&es);
-          while (CURLM_CALL_MULTI_PERFORM ==
-                 curl_multi_perform (multi, &running));
-          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
-          if (mret != CURLM_OK)
-            {
-              curl_multi_remove_handle (multi, c);
-              curl_multi_cleanup (multi);
-              curl_easy_cleanup (c);
-              MHD_stop_daemon (d);
-              return 2048;
-            }
-          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
-            {
-              curl_multi_remove_handle (multi, c);
-              curl_multi_cleanup (multi);
-              curl_easy_cleanup (c);
-              MHD_stop_daemon (d);
-              return 4096;
-            }
-          if (MHD_NO == MHD_get_timeout (d, &timeout))
-            timeout = 100;      /* 100ms == INFTY -- CURL bug... */
-          if ((CURLM_OK == curl_multi_timeout (multi, &ctimeout)) &&
-              (ctimeout < timeout) && (ctimeout >= 0))
-            timeout = ctimeout;
-          tv.tv_sec = timeout / 1000;
-          tv.tv_usec = (timeout % 1000) * 1000;
-          select (max + 1, &rs, &ws, &es, &tv);
-          while (CURLM_CALL_MULTI_PERFORM ==
-                 curl_multi_perform (multi, &running));
-          if (running == 0)
-            {
-              msg = curl_multi_info_read (multi, &running);
-              if (msg == NULL)
-                break;
-              if (msg->msg == CURLMSG_DONE)
-                {
-                  if (msg->data.result != CURLE_OK)
-                    printf ("%s failed at %s:%d: `%s'\n",
-                            "curl_multi_perform",
-                            __FILE__,
-                            __LINE__, curl_easy_strerror (msg->data.result));
-                  curl_multi_remove_handle (multi, c);
-                  curl_easy_cleanup (c);
-                  c = NULL;
-                }
-            }
-          MHD_run (d);
-        }
-      if (c != NULL)
-        {
-          curl_multi_remove_handle (multi, c);
-          curl_easy_cleanup (c);
-        }
-      if ((buf[0] != 'O') || (buf[1] != 'K'))
-        {
-          curl_multi_cleanup (multi);
-          MHD_stop_daemon (d);
-          return 8192;
-        }
-    }
-  curl_multi_cleanup (multi);
-  MHD_stop_daemon (d);
-  fprintf (stderr, "\n");
-  return 0;
-}
-
-
-
-int
-main (int argc, char *const *argv)
-{
-  unsigned int errorCount = 0;
-
-  oneone = NULL != strstr (argv[0], "11");
-  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
-    return 2;
-  errorCount += testInternalPost ();
-  errorCount += testMultithreadedPost ();
-  errorCount += testExternalPost ();
-  if (errorCount != 0)
-    fprintf (stderr, "Error (code: %u)\n", errorCount);
-  curl_global_cleanup ();
-  return errorCount != 0;       /* 0 == pass */
-}

Modified: libmicrohttpd/src/testzzuf/daemontest_postform.c
===================================================================
--- libmicrohttpd/src/testzzuf/daemontest_postform.c    2008-04-13 04:07:43 UTC 
(rev 6688)
+++ libmicrohttpd/src/testzzuf/daemontest_postform.c    2008-04-13 04:32:13 UTC 
(rev 6689)
@@ -1,6 +1,6 @@
 /*
      This file is part of libmicrohttpd
-     (C) 2007 Christian Grothoff
+     (C) 2007, 2008 Christian Grothoff
 
      libmicrohttpd is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -35,6 +35,19 @@
 #include <unistd.h>
 #endif
 
+
+#include "socat.c"
+
+/**
+ * A larger loop count will run more random tests --
+ * which would be good, except that it may take too
+ * long for most user's patience.  So this small
+ * value is the default.
+ */
+#define LOOP_COUNT 10
+
+#define CURL_TIMEOUT 50L
+
 static int oneone;
 
 struct CBC
@@ -72,6 +85,8 @@
 {
   int *eok = cls;
 
+  if (key == NULL)
+    return MHD_YES;
 #if 0
   fprintf (stderr, "PI sees %s-%.*s\n", key, size, value);
 #endif
@@ -100,7 +115,6 @@
 
   if (0 != strcmp ("POST", method))
     {
-      printf ("METHOD: %s\n", method);
       return MHD_NO;            /* unexpected method */
     }
   pp = *unused;
@@ -109,7 +123,7 @@
       eok = 0;
       pp = MHD_create_post_processor (connection, 1024, &post_iterator, &eok);
       if (pp == NULL)
-        abort ();
+        return MHD_NO;
       *unused = pp;
     }
   MHD_post_process (pp, upload_data, *upload_data_size);
@@ -149,50 +163,44 @@
   CURL *c;
   char buf[2048];
   struct CBC cbc;
-  CURLcode errornum;
+  int i;
   struct curl_httppost *pd;
 
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
-                        1080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
+  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
+                        11080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
   if (d == NULL)
     return 1;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  pd = make_form ();
-  curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-  if (CURLE_OK != (errornum = curl_easy_perform (c)))
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      fprintf (stderr,
-               "curl_easy_perform failed: `%s'\n",
-               curl_easy_strerror (errornum));
+      fprintf (stderr, ".");
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      pd = make_form ();
+      curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+      curl_easy_perform (c);
       curl_easy_cleanup (c);
       curl_formfree (pd);
-      MHD_stop_daemon (d);
-      return 2;
     }
-  curl_easy_cleanup (c);
-  curl_formfree (pd);
+  fprintf (stderr, "\n");
+  zzuf_socat_stop ();
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 4;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 8;
   return 0;
 }
 
@@ -203,50 +211,44 @@
   CURL *c;
   char buf[2048];
   struct CBC cbc;
-  CURLcode errornum;
+  int i;
   struct curl_httppost *pd;
 
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
-                        1081, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
+  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
+                        11080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
   if (d == NULL)
     return 16;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  pd = make_form ();
-  curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 5L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-  if (CURLE_OK != (errornum = curl_easy_perform (c)))
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      fprintf (stderr,
-               "curl_easy_perform failed: `%s'\n",
-               curl_easy_strerror (errornum));
+      fprintf (stderr, ".");
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      pd = make_form ();
+      curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+      curl_easy_perform (c);
       curl_easy_cleanup (c);
       curl_formfree (pd);
-      MHD_stop_daemon (d);
-      return 32;
     }
-  curl_easy_cleanup (c);
-  curl_formfree (pd);
+  fprintf (stderr, "\n");
+  zzuf_socat_stop ();
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 64;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 128;
   return 0;
 }
 
@@ -265,119 +267,112 @@
   fd_set es;
   int max;
   int running;
-  struct CURLMsg *msg;
   time_t start;
   struct timeval tv;
   struct curl_httppost *pd;
+  int i;
 
   multi = NULL;
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_DEBUG,
+  d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ ,
                         1082, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
   if (d == NULL)
     return 256;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  pd = make_form ();
-  curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-
-
   multi = curl_multi_init ();
   if (multi == NULL)
     {
-      curl_easy_cleanup (c);
-      curl_formfree (pd);
       MHD_stop_daemon (d);
       return 512;
     }
-  mret = curl_multi_add_handle (multi, c);
-  if (mret != CURLM_OK)
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      curl_multi_cleanup (multi);
-      curl_formfree (pd);
-      curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      return 1024;
-    }
-  start = time (NULL);
-  while ((time (NULL) - start < 5) && (multi != NULL))
-    {
-      max = 0;
-      FD_ZERO (&rs);
-      FD_ZERO (&ws);
-      FD_ZERO (&es);
-      curl_multi_perform (multi, &running);
-      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
+      fprintf (stderr, ".");
+
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      pd = make_form ();
+      curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+
+
+      mret = curl_multi_add_handle (multi, c);
       if (mret != CURLM_OK)
         {
-          curl_multi_remove_handle (multi, c);
           curl_multi_cleanup (multi);
-          curl_easy_cleanup (c);
-          MHD_stop_daemon (d);
           curl_formfree (pd);
-          return 2048;
-        }
-      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
-        {
-          curl_multi_remove_handle (multi, c);
-          curl_multi_cleanup (multi);
           curl_easy_cleanup (c);
-          curl_formfree (pd);
+          zzuf_socat_stop ();
           MHD_stop_daemon (d);
-          return 4096;
+          return 1024;
         }
-      tv.tv_sec = 0;
-      tv.tv_usec = 1000;
-      select (max + 1, &rs, &ws, &es, &tv);
-      curl_multi_perform (multi, &running);
-      if (running == 0)
+      start = time (NULL);
+      while ((time (NULL) - start < 5) && (c != NULL))
         {
-          msg = curl_multi_info_read (multi, &running);
-          if (msg == NULL)
-            break;
-          if (msg->msg == CURLMSG_DONE)
+          max = 0;
+          FD_ZERO (&rs);
+          FD_ZERO (&ws);
+          FD_ZERO (&es);
+          curl_multi_perform (multi, &running);
+          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
+          if (mret != CURLM_OK)
             {
-              if (msg->data.result != CURLE_OK)
-                printf ("%s failed at %s:%d: `%s'\n",
-                        "curl_multi_perform",
-                        __FILE__,
-                        __LINE__, curl_easy_strerror (msg->data.result));
               curl_multi_remove_handle (multi, c);
               curl_multi_cleanup (multi);
               curl_easy_cleanup (c);
+              zzuf_socat_stop ();
+              MHD_stop_daemon (d);
+              curl_formfree (pd);
+              return 2048;
+            }
+          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
+            {
+              curl_multi_remove_handle (multi, c);
+              curl_multi_cleanup (multi);
+              curl_easy_cleanup (c);
+              curl_formfree (pd);
+              zzuf_socat_stop ();
+              MHD_stop_daemon (d);
+              return 4096;
+            }
+          tv.tv_sec = 0;
+          tv.tv_usec = 1000;
+          select (max + 1, &rs, &ws, &es, &tv);
+          curl_multi_perform (multi, &running);
+          if (running == 0)
+            {
+              curl_multi_info_read (multi, &running);
+              curl_multi_remove_handle (multi, c);
+              curl_easy_cleanup (c);
               c = NULL;
-              multi = NULL;
             }
+          MHD_run (d);
         }
-      MHD_run (d);
+      if (c != NULL)
+        {
+          curl_multi_remove_handle (multi, c);
+          curl_easy_cleanup (c);
+        }
+      curl_formfree (pd);
     }
-  if (multi != NULL)
-    {
-      curl_multi_remove_handle (multi, c);
-      curl_easy_cleanup (c);
-      curl_multi_cleanup (multi);
-    }
-  curl_formfree (pd);
+  fprintf (stderr, "\n");
+  zzuf_socat_stop ();
+
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 8192;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 16384;
   return 0;
 }
 
@@ -392,11 +387,8 @@
   if (0 != curl_global_init (CURL_GLOBAL_WIN32))
     return 2;
   errorCount += testInternalPost ();
-  if (0)
-    {
-      errorCount += testMultithreadedPost ();
-      errorCount += testExternalPost ();
-    }
+  errorCount += testMultithreadedPost ();
+  errorCount += testExternalPost ();
   if (errorCount != 0)
     fprintf (stderr, "Error (code: %u)\n", errorCount);
   curl_global_cleanup ();

Modified: libmicrohttpd/src/testzzuf/daemontest_put.c
===================================================================
--- libmicrohttpd/src/testzzuf/daemontest_put.c 2008-04-13 04:07:43 UTC (rev 
6688)
+++ libmicrohttpd/src/testzzuf/daemontest_put.c 2008-04-13 04:32:13 UTC (rev 
6689)
@@ -1,6 +1,6 @@
 /*
      This file is part of libmicrohttpd
-     (C) 2007 Christian Grothoff
+     (C) 2007, 2008 Christian Grothoff
 
      libmicrohttpd is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -35,6 +35,19 @@
 #include <unistd.h>
 #endif
 
+
+#include "socat.c"
+
+/**
+ * A larger loop count will run more random tests --
+ * which would be good, except that it may take too
+ * long for most user's patience.  So this small
+ * value is the default.
+ */
+#define LOOP_COUNT 10
+
+#define CURL_TIMEOUT 50L
+
 static int oneone;
 
 struct CBC
@@ -118,50 +131,45 @@
   struct CBC cbc;
   unsigned int pos = 0;
   int done_flag = 0;
-  CURLcode errornum;
+  int i;
 
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
-                        1080,
+  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
+                        11080,
                         NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
   if (d == NULL)
     return 1;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
-  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
-  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
-  curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-  if (CURLE_OK != (errornum = curl_easy_perform (c)))
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      fprintf (stderr,
-               "curl_easy_perform failed: `%s'\n",
-               curl_easy_strerror (errornum));
+      fprintf (stderr, ".");
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
+      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
+      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
+      curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+      curl_easy_perform (c);
       curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      return 2;
     }
-  curl_easy_cleanup (c);
+  fprintf (stderr, "\n");
+  zzuf_socat_stop ();
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 4;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 8;
   return 0;
 }
 
@@ -174,51 +182,45 @@
   struct CBC cbc;
   unsigned int pos = 0;
   int done_flag = 0;
-  CURLcode errornum;
+  int i;
 
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
-                        1081,
+  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
+                        11080,
                         NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
   if (d == NULL)
     return 16;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
-  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
-  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
-  curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-  if (CURLE_OK != (errornum = curl_easy_perform (c)))
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      fprintf (stderr,
-               "curl_easy_perform failed: `%s'\n",
-               curl_easy_strerror (errornum));
+      fprintf (stderr, ".");
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
+      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
+      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
+      curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+      curl_easy_perform (c);
       curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      return 32;
     }
-  curl_easy_cleanup (c);
+  fprintf (stderr, "\n");
+  zzuf_socat_stop ();
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 64;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 128;
-
   return 0;
 }
 
@@ -237,118 +239,113 @@
   fd_set es;
   int max;
   int running;
-  struct CURLMsg *msg;
   time_t start;
   struct timeval tv;
   unsigned int pos = 0;
   int done_flag = 0;
+  int i;
 
   multi = NULL;
   cbc.buf = buf;
   cbc.size = 2048;
   cbc.pos = 0;
-  d = MHD_start_daemon (MHD_USE_DEBUG,
-                        1082,
+  d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ ,
+                        11080,
                         NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
   if (d == NULL)
     return 256;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
-  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
-  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
-  curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  if (oneone)
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  else
-    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-
-
   multi = curl_multi_init ();
   if (multi == NULL)
     {
-      curl_easy_cleanup (c);
       MHD_stop_daemon (d);
       return 512;
     }
-  mret = curl_multi_add_handle (multi, c);
-  if (mret != CURLM_OK)
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      curl_multi_cleanup (multi);
-      curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      return 1024;
-    }
-  start = time (NULL);
-  while ((time (NULL) - start < 5) && (multi != NULL))
-    {
-      max = 0;
-      FD_ZERO (&rs);
-      FD_ZERO (&ws);
-      FD_ZERO (&es);
-      curl_multi_perform (multi, &running);
-      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
+      fprintf (stderr, ".");
+
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
+      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
+      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
+      curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      if (oneone)
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      else
+        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+
+
+
+      mret = curl_multi_add_handle (multi, c);
       if (mret != CURLM_OK)
         {
-          curl_multi_remove_handle (multi, c);
           curl_multi_cleanup (multi);
           curl_easy_cleanup (c);
+          zzuf_socat_stop ();
           MHD_stop_daemon (d);
-          return 2048;
+          return 1024;
         }
-      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
+      start = time (NULL);
+      while ((time (NULL) - start < 5) && (c != NULL))
         {
-          curl_multi_remove_handle (multi, c);
-          curl_multi_cleanup (multi);
-          curl_easy_cleanup (c);
-          MHD_stop_daemon (d);
-          return 4096;
-        }
-      tv.tv_sec = 0;
-      tv.tv_usec = 1000;
-      select (max + 1, &rs, &ws, &es, &tv);
-      curl_multi_perform (multi, &running);
-      if (running == 0)
-        {
-          msg = curl_multi_info_read (multi, &running);
-          if (msg == NULL)
-            break;
-          if (msg->msg == CURLMSG_DONE)
+          max = 0;
+          FD_ZERO (&rs);
+          FD_ZERO (&ws);
+          FD_ZERO (&es);
+          curl_multi_perform (multi, &running);
+          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
+          if (mret != CURLM_OK)
             {
-              if (msg->data.result != CURLE_OK)
-                printf ("%s failed at %s:%d: `%s'\n",
-                        "curl_multi_perform",
-                        __FILE__,
-                        __LINE__, curl_easy_strerror (msg->data.result));
               curl_multi_remove_handle (multi, c);
               curl_multi_cleanup (multi);
               curl_easy_cleanup (c);
+              zzuf_socat_stop ();
+              MHD_stop_daemon (d);
+              return 2048;
+            }
+          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
+            {
+              curl_multi_remove_handle (multi, c);
+              curl_multi_cleanup (multi);
+              curl_easy_cleanup (c);
+              zzuf_socat_stop ();
+              MHD_stop_daemon (d);
+              return 4096;
+            }
+          tv.tv_sec = 0;
+          tv.tv_usec = 1000;
+          select (max + 1, &rs, &ws, &es, &tv);
+          curl_multi_perform (multi, &running);
+          if (running == 0)
+            {
+              curl_multi_info_read (multi, &running);
+              curl_multi_remove_handle (multi, c);
+              curl_easy_cleanup (c);
               c = NULL;
-              multi = NULL;
             }
+          MHD_run (d);
         }
-      MHD_run (d);
+      if (c != NULL)
+        {
+          curl_multi_remove_handle (multi, c);
+          curl_easy_cleanup (c);
+        }
     }
-  if (multi != NULL)
-    {
-      curl_multi_remove_handle (multi, c);
-      curl_easy_cleanup (c);
-      curl_multi_cleanup (multi);
-    }
+  fprintf (stderr, "\n");
+  curl_multi_cleanup (multi);
+  zzuf_socat_stop ();
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 8192;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 16384;
   return 0;
 }
 
@@ -363,11 +360,8 @@
   if (0 != curl_global_init (CURL_GLOBAL_WIN32))
     return 2;
   errorCount += testInternalPut ();
-  if (0)
-    {
-      errorCount += testMultithreadedPut ();
-      errorCount += testExternalPut ();
-    }
+  errorCount += testMultithreadedPut ();
+  errorCount += testExternalPut ();
   if (errorCount != 0)
     fprintf (stderr, "Error (code: %u)\n", errorCount);
   curl_global_cleanup ();

Modified: libmicrohttpd/src/testzzuf/daemontest_put_chunked.c
===================================================================
--- libmicrohttpd/src/testzzuf/daemontest_put_chunked.c 2008-04-13 04:07:43 UTC 
(rev 6688)
+++ libmicrohttpd/src/testzzuf/daemontest_put_chunked.c 2008-04-13 04:32:13 UTC 
(rev 6689)
@@ -1,6 +1,6 @@
 /*
      This file is part of libmicrohttpd
-     (C) 2007 Christian Grothoff
+     (C) 2007, 2008 Christian Grothoff
 
      libmicrohttpd is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -36,6 +36,18 @@
 #include <unistd.h>
 #endif
 
+#include "socat.c"
+
+/**
+ * A larger loop count will run more random tests --
+ * which would be good, except that it may take too
+ * long for most user's patience.  So this small
+ * value is the default.
+ */
+#define LOOP_COUNT 10
+
+#define CURL_TIMEOUT 50L
+
 struct CBC
 {
   char *buf;
@@ -92,7 +104,6 @@
       have = *upload_data_size;
       if (have + *done > 8)
         {
-          printf ("Invalid upload data `%8s'!\n", upload_data);
           return MHD_NO;
         }
       if (0 == memcmp (upload_data, &"Hello123"[*done], have))
@@ -102,7 +113,6 @@
         }
       else
         {
-          printf ("Invalid upload data `%8s'!\n", upload_data);
           return MHD_NO;
         }
 #if 0
@@ -127,7 +137,7 @@
   struct CBC cbc;
   unsigned int pos = 0;
   int done_flag = 0;
-  CURLcode errornum;
+  int i;
 
   cbc.buf = buf;
   cbc.size = 2048;
@@ -137,40 +147,35 @@
                         NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
   if (d == NULL)
     return 1;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11080/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
-  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
-  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
-  /*
-     // by not giving the file size, we force chunking!
-     curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
-   */
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
-  if (CURLE_OK != (errornum = curl_easy_perform (c)))
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      fprintf (stderr,
-               "curl_easy_perform failed: `%s'\n",
-               curl_easy_strerror (errornum));
+      fprintf (stderr, ".");
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11080/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
+      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
+      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
+      /*
+         // by not giving the file size, we force chunking!
+         curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
+       */
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+      curl_easy_perform (c);
       curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      return 2;
     }
-  curl_easy_cleanup (c);
+  fprintf (stderr, "\n");
+  zzuf_socat_stop ();
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 4;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 8;
   return 0;
 }
 
@@ -246,11 +251,11 @@
   fd_set es;
   int max;
   int running;
-  struct CURLMsg *msg;
   time_t start;
   struct timeval tv;
   unsigned int pos = 0;
   int done_flag = 0;
+  int i;
 
   multi = NULL;
   cbc.buf = buf;
@@ -261,103 +266,97 @@
                         NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
   if (d == NULL)
     return 256;
-  c = curl_easy_init ();
-  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11082/hello_world";);
-  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
-  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
-  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
-  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
-  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
-  /*
-     // by not giving the file size, we force chunking!
-     curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
-   */
-  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
-  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
-  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
-  // NOTE: use of CONNECTTIMEOUT without also
-  //   setting NOSIGNAL results in really weird
-  //   crashes on my system!
-  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
 
-
   multi = curl_multi_init ();
   if (multi == NULL)
     {
-      curl_easy_cleanup (c);
       MHD_stop_daemon (d);
       return 512;
     }
-  mret = curl_multi_add_handle (multi, c);
-  if (mret != CURLM_OK)
+  zzuf_socat_start ();
+  for (i = 0; i < LOOP_COUNT; i++)
     {
-      curl_multi_cleanup (multi);
-      curl_easy_cleanup (c);
-      MHD_stop_daemon (d);
-      return 1024;
-    }
-  start = time (NULL);
-  while ((time (NULL) - start < 5) && (multi != NULL))
-    {
-      max = 0;
-      FD_ZERO (&rs);
-      FD_ZERO (&ws);
-      FD_ZERO (&es);
-      curl_multi_perform (multi, &running);
-      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
+      fprintf (stderr, ".");
+      c = curl_easy_init ();
+      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11082/hello_world";);
+      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
+      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
+      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
+      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
+      /*
+         // by not giving the file size, we force chunking!
+         curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
+       */
+      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
+      curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
+      // NOTE: use of CONNECTTIMEOUT without also
+      //   setting NOSIGNAL results in really weird
+      //   crashes on my system!
+      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+
+
+      mret = curl_multi_add_handle (multi, c);
       if (mret != CURLM_OK)
         {
-          curl_multi_remove_handle (multi, c);
           curl_multi_cleanup (multi);
           curl_easy_cleanup (c);
+          zzuf_socat_stop ();
           MHD_stop_daemon (d);
-          return 2048;
+          return 1024;
         }
-      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
+      start = time (NULL);
+      while ((time (NULL) - start < 5) && (c != NULL))
         {
-          curl_multi_remove_handle (multi, c);
-          curl_multi_cleanup (multi);
-          curl_easy_cleanup (c);
-          MHD_stop_daemon (d);
-          return 4096;
-        }
-      tv.tv_sec = 0;
-      tv.tv_usec = 1000;
-      select (max + 1, &rs, &ws, &es, &tv);
-      curl_multi_perform (multi, &running);
-      if (running == 0)
-        {
-          msg = curl_multi_info_read (multi, &running);
-          if (msg == NULL)
-            break;
-          if (msg->msg == CURLMSG_DONE)
+          max = 0;
+          FD_ZERO (&rs);
+          FD_ZERO (&ws);
+          FD_ZERO (&es);
+          curl_multi_perform (multi, &running);
+          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
+          if (mret != CURLM_OK)
             {
-              if (msg->data.result != CURLE_OK)
-                printf ("%s failed at %s:%d: `%s'\n",
-                        "curl_multi_perform",
-                        __FILE__,
-                        __LINE__, curl_easy_strerror (msg->data.result));
               curl_multi_remove_handle (multi, c);
               curl_multi_cleanup (multi);
               curl_easy_cleanup (c);
+              zzuf_socat_stop ();
+              MHD_stop_daemon (d);
+              return 2048;
+            }
+          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
+            {
+              curl_multi_remove_handle (multi, c);
+              curl_multi_cleanup (multi);
+              curl_easy_cleanup (c);
+              zzuf_socat_stop ();
+              MHD_stop_daemon (d);
+              return 4096;
+            }
+          tv.tv_sec = 0;
+          tv.tv_usec = 1000;
+          select (max + 1, &rs, &ws, &es, &tv);
+          curl_multi_perform (multi, &running);
+          if (running == 0)
+            {
+              curl_multi_info_read (multi, &running);
+              curl_multi_remove_handle (multi, c);
+              curl_easy_cleanup (c);
               c = NULL;
-              multi = NULL;
             }
+          MHD_run (d);
         }
-      MHD_run (d);
+      if (c != NULL)
+        {
+          curl_multi_remove_handle (multi, c);
+          curl_easy_cleanup (c);
+        }
     }
-  if (multi != NULL)
-    {
-      curl_multi_remove_handle (multi, c);
-      curl_easy_cleanup (c);
-      curl_multi_cleanup (multi);
-    }
+  fprintf (stderr, "\n");
+  curl_multi_cleanup (multi);
+  zzuf_socat_stop ();
   MHD_stop_daemon (d);
-  if (cbc.pos != strlen ("/hello_world"))
-    return 8192;
-  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
-    return 16384;
   return 0;
 }
 
@@ -371,11 +370,8 @@
   if (0 != curl_global_init (CURL_GLOBAL_WIN32))
     return 2;
   errorCount += testInternalPut ();
-  if (0)
-    {
-      errorCount += testMultithreadedPut ();
-      errorCount += testExternalPut ();
-    }
+  errorCount += testMultithreadedPut ();
+  errorCount += testExternalPut ();
   if (errorCount != 0)
     fprintf (stderr, "Error (code: %u)\n", errorCount);
   curl_global_cleanup ();

Modified: libmicrohttpd/src/testzzuf/socat.c
===================================================================
--- libmicrohttpd/src/testzzuf/socat.c  2008-04-13 04:07:43 UTC (rev 6688)
+++ libmicrohttpd/src/testzzuf/socat.c  2008-04-13 04:32:13 UTC (rev 6689)
@@ -42,6 +42,9 @@
     "-n",
     "-A",
     "socat",
+    "--",
+    "-lf",
+    "/dev/null",
     "TCP4-LISTEN:11081,reuseaddr,fork",
     "TCP4:127.0.0.1:11080",
     NULL,





reply via email to

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