// // Copyright (c) 2018 Michael Tuexen // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // 1. Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF // SUCH DAMAGE. // --ip_version=ipv4 --tolerance_usecs=150000 --tcp_ts_tick_usecs=1000 /* one tick is a ms */ `sysctl -w net.inet.tcp.syncookies_only=0` // The connection setup is limited by net.inet.tcp.keepinit, which is 75 seconds. +00.000 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3 +00.000 fcntl(3, F_GETFL) = 0x02 (flags O_RDWR) +00.000 fcntl(3, F_SETFL, O_RDWR | O_NONBLOCK) = 0 +00.000 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) +00.000 > S 0:0(0) win 65535 +03.000 > S 0:0(0) win 65535 +03.200 > S 0:0(0) win 65535 +03.200 > S 0:0(0) win 65535 +03.200 > S 0:0(0) win 65535 +03.200 > S 0:0(0) win 65535 +06.200 > S 0:0(0) win 65535 +12.200 > S 0:0(0) win 65535 +24.200 > S 0:0(0) win 65535 +16.700 getsockopt(3, SOL_SOCKET, SO_ERROR, [ETIMEDOUT], [4]) = 0 +00.000 close(3) = 0