Testsuite: add testcase showing outgoing-conn local interface
[exim.git] / test / src / server.c
index 5af86d96f76eb4075c2b05a0de962f996456abf5..ba731625b3733fca1234f280655e20568952bc96 100644 (file)
@@ -267,7 +267,7 @@ if (na < argc) connection_count = atoi(argv[na]);
 if (initial_pause > 0)
   {
   if (debug)
-    printf("%d: Inital pause of %d seconds\n", time(NULL), initial_pause);
+    printf("%ld: Inital pause of %d seconds\n", (long)time(NULL), initial_pause);
   else
     printf("Inital pause of %d seconds\n", initial_pause);
   while (initial_pause > 0)
@@ -298,7 +298,7 @@ else
       printf("IPv6 socket creation failed: %s\n", strerror(errno));
       exit(1);
       }
-#ifdef TCP_FASTOPEN
+#if defined(TCP_FASTOPEN) && !defined(__APPLE__)
     if (tfo)
       {
       int backlog = 5;
@@ -330,7 +330,7 @@ else
       printf("IPv4 socket creation failed: %s\n", strerror(errno));
       exit(1);
       }
-#ifdef TCP_FASTOPEN
+#if defined(TCP_FASTOPEN) && !defined(__APPLE__)
     if (tfo)
       {
       int backlog = 5;
@@ -401,7 +401,7 @@ else
       sin6.sin6_addr = anyaddr6;
       if (bind(listen_socket[i], (struct sockaddr *)&sin6, sizeof(sin6)) < 0)
         {
-        printf("IPv6 socket bind() failed: %s\n", strerror(errno));
+        printf("IPv6 socket bind(port %d) failed: %s\n", port, strerror(errno));
         exit(1);
         }
       }
@@ -420,7 +420,7 @@ else
       if (bind(listen_socket[i], (struct sockaddr *)&sin4, sizeof(sin4)) < 0)
         if (listen_socket[v6n] < 0 || errno != EADDRINUSE)
           {
-          printf("IPv4 socket bind() failed: %s\n", strerror(errno));
+          printf("IPv4 socket bind(port %d) failed: %s\n", port, strerror(errno));
           exit(1);
           }
         else
@@ -438,16 +438,21 @@ error because it means that the IPv6 socket will handle IPv4 connections. Don't
 output anything, because it will mess up the test output, which will be
 different for systems that do this and those that don't. */
 
-for (i = 0; i <= skn; i++)
+for (i = 0; i <= skn; i++) if (listen_socket[i] >= 0)
   {
-  if (listen_socket[i] >= 0 && listen(listen_socket[i], 5) < 0)
-    {
+  if (listen(listen_socket[i], 5) < 0)
     if (i != v4n || listen_socket[v6n] < 0 || errno != EADDRINUSE)
       {
       printf("listen() failed: %s\n", strerror(errno));
       exit(1);
       }
-    }
+
+#if defined(TCP_FASTOPEN) && defined(__APPLE__)
+  if (  tfo
+     && setsockopt(listen_socket[v4n], IPPROTO_TCP, TCP_FASTOPEN, &on, sizeof(on))
+     && debug)
+      printf("setsockopt TCP_FASTOPEN: %s\n", strerror(errno));
+#endif
   }