diff options
author | Jeremy Harris <jgh146exb@wizmail.org> | 2018-10-30 22:09:15 +0000 |
---|---|---|
committer | Jeremy Harris <jgh146exb@wizmail.org> | 2018-10-30 22:36:55 +0000 |
commit | b536a578fbabdc9d39da53d54a8d7700ba537431 (patch) | |
tree | b3eef31b81c965a39b1c72b697b9244cb90a2466 /test | |
parent | 7df6163adc1837c48842471307ecb18aaded4530 (diff) |
MacOS: TCP Fast Open
Diffstat (limited to 'test')
-rw-r--r-- | test/scripts/1990-TCP-Fast-Open/1990 | 22 | ||||
-rw-r--r-- | test/src/server.c | 17 |
2 files changed, 27 insertions, 12 deletions
diff --git a/test/scripts/1990-TCP-Fast-Open/1990 b/test/scripts/1990-TCP-Fast-Open/1990 index 04b41a7af..ec8e32c8f 100644 --- a/test/scripts/1990-TCP-Fast-Open/1990 +++ b/test/scripts/1990-TCP-Fast-Open/1990 @@ -13,6 +13,15 @@ # an unhelpful error from RTNETLINK. # To tidy up: 'sudo tc qdisc delete dev lo root' # +# MacOS: +# The kernel seems to have TFO enabled both ways as default. +# There is a net.inet.tcp.clear_tfocache parameter +## sysctl -w foo-val +# +# For network delays there is something called 'Network Link Conditioner' +# which might do the job. But how to manipulate it? +# +# sudo perl system ("tc qdisc add dev lo root netem delay 50ms"); **** @@ -22,17 +31,14 @@ system ("tc qdisc add dev lo root netem delay 50ms"); # (currently on a separate packet after the server SYN,ACK but before # the client ACK). # -# The client log => lint.ex should have a "TFO" element. -# Assuming this is the first run since boot, the a@test recipient will not. +# The client log => line should have a "TFO" element. +# The server log <= line for a@test.ex should not. # +# First clear any previously-obtained cookie: sudo perl system ("ip tcp_metrics delete 127.0.0.1"); **** # -# The server log <= line for b@test.ex should have a "TFO" element, but -# this will only be obtained when the above delay is inserted into the -# loopback net path. -# # # # FreeBSD: it looks like you have to compile a custom kernel, with @@ -48,6 +54,10 @@ Testing **** sleep 3 # +# The server log <= line for b@test.ex should have a "TFO" element, but +# this will only be obtained when the above delay is inserted into the +# loopback net path. +# exim b@test.ex Testing **** diff --git a/test/src/server.c b/test/src/server.c index fe1c79f02..ba731625b 100644 --- a/test/src/server.c +++ b/test/src/server.c @@ -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 } |