#define udn 2 /* Unix domain socket number */
#define skn 2 /* Potential number of sockets */
-int main(int argc, char **argv)
+int
+main(int argc, char **argv)
{
int i;
int port = 0;
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)
if (port == 0) /* Unix domain */
{
- if (debug) printf("%d: Creating Unix domain socket\n", time(NULL));
+ if (debug) printf("%ld: Creating Unix domain socket\n", (long) time(NULL));
listen_socket[udn] = socket(PF_UNIX, SOCK_STREAM, 0);
if (listen_socket[udn] < 0)
{
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;
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;
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
}
for (count = 0; count < connection_count; count++)
{
+ struct {
+ int left;
+ BOOL in_use;
+ } content_length = { 0, FALSE };
+
alarm(timeout);
if (port <= 0)
{
{ end = "\n"; ss += 3; len -= 3; }
fwrite(ss, 1, len, out);
- if (*end) fprintf(out, end);
+ if (*end) fputs(end, out);
}
else if (isdigit((unsigned char)ss[0]))
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",
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)
{
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);
break;
}
}
+
+ if (sscanf(CCS buffer, "<Content-length: %d", &content_length.left))
+ content_length.in_use = TRUE;
+ if (content_length.in_use && content_length.left <= 0)
+ shutdown(dup_accept_socket, SHUT_RD);
}
}