X-Git-Url: https://git.exim.org/users/jgh/exim.git/blobdiff_plain/590795f4282e84ce9c2730bb17c7e6bb23615966..c0fb53b74e07fd17247960c998ffcb1f3c9f931f:/test/src/server.c diff --git a/test/src/server.c b/test/src/server.c index 719350c15..ba731625b 100644 --- a/test/src/server.c +++ b/test/src/server.c @@ -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; @@ -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 } @@ -519,6 +524,11 @@ s = script; for (count = 0; count < connection_count; count++) { + struct { + int left; + BOOL in_use; + } content_length = { 0, FALSE }; + alarm(timeout); if (port <= 0) { @@ -729,6 +739,7 @@ for (count = 0; count < connection_count; count++) alarm(timeout); n = read(dup_accept_socket, CS buffer+offset, s->len - offset); + if (content_length.in_use) content_length.left -= n; if (n == 0) { printf("%sxpected EOF read from client\n", @@ -746,8 +757,9 @@ for (count = 0; count < connection_count; count++) if (data) do { n = (read(dup_accept_socket, &c, 1) == 1 && c == '.'); + if (content_length.in_use) content_length.left--; while (c != '\n' && read(dup_accept_socket, &c, 1) == 1) - ; + if (content_length.in_use) content_length.left--; } while (!n); else if (memcmp(ss, buffer, n) != 0) { @@ -770,7 +782,8 @@ for (count = 0; count < connection_count; count++) goto END_OFF; } alarm(0); - n = (int)strlen(CS buffer); + n = strlen(CS buffer); + if (content_length.in_use) content_length.left -= (n - offset); while (n > 0 && isspace(buffer[n-1])) n--; buffer[n] = 0; printf("%s\n", buffer); @@ -784,6 +797,11 @@ for (count = 0; count < connection_count; count++) break; } } + + if (sscanf(CCS buffer, "