diff options
author | gVisor bot <gvisor-bot@google.com> | 2019-12-17 10:08:47 -0800 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2019-12-17 10:10:06 -0800 |
commit | 3f4d8fefb45d75937292302e4c158f76da5c7ca8 (patch) | |
tree | 0ed42ea1fa2868fbeb505a9f556401e078526d8c /pkg/tcpip/transport/tcp/connect.go | |
parent | 67000b929b9f5a3aedf6f5f56611c76411d02d78 (diff) |
Internal change.
PiperOrigin-RevId: 286003946
Diffstat (limited to 'pkg/tcpip/transport/tcp/connect.go')
-rw-r--r-- | pkg/tcpip/transport/tcp/connect.go | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/pkg/tcpip/transport/tcp/connect.go b/pkg/tcpip/transport/tcp/connect.go index 4c34fc9d2..cdd69f360 100644 --- a/pkg/tcpip/transport/tcp/connect.go +++ b/pkg/tcpip/transport/tcp/connect.go @@ -218,6 +218,14 @@ func (h *handshake) synSentState(s *segment) *tcpip.Error { // acceptable if the ack field acknowledges the SYN. if s.flagIsSet(header.TCPFlagRst) { if s.flagIsSet(header.TCPFlagAck) && s.ackNumber == h.iss+1 { + // RFC 793, page 67, states that "If the RST bit is set [and] If the ACK + // was acceptable then signal the user "error: connection reset", drop + // the segment, enter CLOSED state, delete TCB, and return." + h.ep.mu.Lock() + h.ep.workerCleanup = true + h.ep.mu.Unlock() + // Although the RFC above calls out ECONNRESET, Linux actually returns + // ECONNREFUSED here so we do as well. return tcpip.ErrConnectionRefused } return nil |