36 lines
1.3 KiB
Plaintext
36 lines
1.3 KiB
Plaintext
|
// Test a RST is not generated in response to a RST and a RST is correctly
|
||
|
// generated when an accepted endpoint is RST due to an incoming RST.
|
||
|
|
||
|
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||
|
+0 bind(3, ..., ...) = 0
|
||
|
|
||
|
+0 listen(3, 1) = 0
|
||
|
|
||
|
// Establish a connection without timestamps.
|
||
|
+0 < S 0:0(0) win 32792 <mss 1460,sackOK,nop,nop,nop,wscale 7>
|
||
|
+0 > S. 0:0(0) ack 1 <...>
|
||
|
+0 < P. 1:1(0) ack 1 win 257
|
||
|
|
||
|
+0.100 accept(3, ..., ...) = 4
|
||
|
|
||
|
+0.200 < R 1:1(0) win 0
|
||
|
|
||
|
+0.300 read(4,..., 4) = -1 ECONNRESET (Connection Reset by Peer)
|
||
|
|
||
|
+0.00 < . 1:1(0) ack 1 win 257
|
||
|
|
||
|
// Linux generates a reset with no ack number/bit set. This is contradictory to
|
||
|
// what is specified in Rule 1 under Reset Generation in
|
||
|
// https://tools.ietf.org/html/rfc793#section-3.4.
|
||
|
// "1. If the connection does not exist (CLOSED) then a reset is sent
|
||
|
// in response to any incoming segment except another reset. In
|
||
|
// particular, SYNs addressed to a non-existent connection are rejected
|
||
|
// by this means.
|
||
|
//
|
||
|
// If the incoming segment has an ACK field, the reset takes its
|
||
|
// sequence number from the ACK field of the segment, otherwise the
|
||
|
// reset has sequence number zero and the ACK field is set to the sum
|
||
|
// of the sequence number and segment length of the incoming segment.
|
||
|
// The connection remains in the CLOSED state."
|
||
|
|
||
|
+0.00 > R 1:1(0) win 0
|