• G
    slirp: Propagate host TCP RST packet to the guest after socket disconnected · 93a972f8
    Gavin Grant 提交于
    Commit 27d92ebc handled the case where the TCP
    connection is abruptly closed via a RST packet, by checking for the ECONNRESET
    errno. However it does not consider the case where the connection has been
    half-closed by the host (FIN/ACK), then the host socket is disconnected. For
    example, if the host application calls close() on the socket, then the
    application exits.
    
    In this case, the socket still exists due to the file descriptor in SLIRP, but
    it is disconnected. recv() does not indicate an error since an orderly socket
    close has previously occurred. The socket will then be stuck in FIN_WAIT_2,
    until the peer sends FIN/ACK or a timeout occurs. Instead we can send a RST
    to the peer and transition to the CLOSED state.
    Signed-off-by: NGavin Grant <gavingrant@protonmail.com>
    Signed-off-by: NSamuel Thibault <samuel.thibault@ens-lyon.org>
    93a972f8
socket.c 23.3 KB