接收到 RST 包后的处理逻辑位于 tcp_input.c at v4.15:
1 | /* When we get a reset we do this. */ |
即根据当前 Socket 所处的状态设置不同的 sk->sk_err
,随即调用了 tcp_done
函数,源码位于 tcp.c at v4.15:
1 | void tcp_done(struct sock *sk) |
即设置 Socket 状态为 CLOSE 并执行相关清理操作。其中 ECONNREFUSED
的注释为 Connection refused
,EPIPE
的注释为 Broken pipe
,ECONNRESET
的注释为 Connection reset by peer
。