// Test set keepalive after accept // Establish a connection. 0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3 +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 +0 bind(3, ..., ...) = 0 +0 listen(3, 1) = 0 +0 < S 0:0(0) win 32792 +0 > S. 0:0(0) ack 1 <...> +.1 < . 1:1(0) ack 1 win 32792 +0 accept(3, ..., ...) = 4 // enable keepalive and set args +0 setsockopt(4, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0 // extra ack, it's not needed, fix it later +0 ~ +100 > . 1:1(0) ack 1 +0 setsockopt(4, IPPROTO_TCP, TCP_KEEPIDLE, [5], 4) = 0 // extra ack, it's not needed, fix it later +0 ~ +100 > . 1:1(0) ack 1 +0 setsockopt(4, IPPROTO_TCP, TCP_KEEPINTVL, [2], 4) = 0 // extra ack, it's not needed, fix it later +0 ~ +100 > . 1:1(0) ack 1 +0 setsockopt(4, IPPROTO_TCP, TCP_KEEPCNT, [2], 4) = 0 // first keep-alive pkt, idle = 5 +4 ~ +6 > . 0:0(0) ack 1 // second keep-alive pkt, interval = 2 +1 ~ +3 > . 0:0(0) ack 1 // get response, idle = 5 +0 < . 1:1(0) ack 1 win 32792 // first keep-alive pkt again, idle = 5 +4 ~ +6 > . 0:0(0) ack 1 // second keep-alive pkt, interval = 2 +1 ~ +3 > . 0:0(0) ack 1 // get no response, send rst +1 ~ +3 > R. 1:1(0) ack 1 +1 read(4, ..., 10) = -1 ETIMEDOUT (Connection timed out) +0 close(4) = 0