// SPDX-License-Identifier: GPL-2.0 // Test TCP fastopen behavior with NULL as buffer pointer, but a non-zero // buffer length. `./defaults.sh ./set_sysctls.py /proc/sys/net/ipv4/tcp_timestamps=0` // Cache warmup: send a Fast Open cookie request 0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3 +0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 +0 setsockopt(3, SOL_TCP, TCP_FASTOPEN_CONNECT, [1], 4) = 0 +0 connect(3, ..., ...) = -1 EINPROGRESS (Operation is now in progress) +0 > S 0:0(0) +0 < S. 123:123(0) ack 1 win 14600 +0 > . 1:1(0) ack 1 +0 close(3) = 0 +0 > F. 1:1(0) ack 1 +0 < F. 1:1(0) ack 2 win 92 +0 > . 2:2(0) ack 2 // Test with MSG_FASTOPEN without TCP_FASTOPEN_CONNECT. +0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4 +0 fcntl(4, F_SETFL, O_RDWR|O_NONBLOCK) = 0 +0 sendto(4, NULL, 1, MSG_FASTOPEN, ..., ...) = -1 +0 close(4) = 0 // Test with TCP_FASTOPEN_CONNECT without MSG_FASTOPEN. +0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 5 +0 fcntl(5, F_SETFL, O_RDWR|O_NONBLOCK) = 0 +0 setsockopt(5, SOL_TCP, TCP_FASTOPEN_CONNECT, [1], 4) = 0 +0 connect(5, ..., ...) = 0 +0 sendto(5, NULL, 1, 0, ..., ...) = -1 +0 close(5) = 0 // Test with both TCP_FASTOPEN_CONNECT and MSG_FASTOPEN. +0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 6 +0 fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0 +0 setsockopt(6, SOL_TCP, TCP_FASTOPEN_CONNECT, [1], 4) = 0 +0 connect(6, ..., ...) = 0 +0 sendto(6, NULL, 1, MSG_FASTOPEN, ..., ...) = -1 +0 close(6) = 0 `/tmp/sysctl_restore_${PPID}.sh`