QEMU's user-mode networking does not currently pass received TCP RSTs to guests, meaning that applications in guests hang if the remote server rejects their network connections. This is particularly noticeable when IPv6 is enabled, the guest is configured to prefer IPv6 and the remote server rejects IPv6 connections (segment-data.zqtk.net is one example), but the bug appears to be longstanding and affects TCP over IPv4 as well.
There are three short patches in this series. The first fixes a crash which would be exposed by the last patch in the series. The second, which fixes delivery of an RST interrupting an already-established TCP connection, was submitted by Edgar Iglesias in 2008 and appears to have been missed then. The last patch fixes the case where the remote end sends RST in reply to our SYN (rejects our incoming connection attempt). Lightly tested on a Linux host with Linux and Windows 7 guests. Edgar E. Iglesias (1): slirp: Propagate host TCP RST to the guest. Steven Luo (2): slirp: don't crash when tcp_sockclosed() is called with a NULL tp slirp: handle deferred ECONNREFUSED on non-blocking TCP sockets slirp/socket.c | 17 ++++++++++++++++- slirp/tcp_input.c | 6 ++++++ slirp/tcp_subr.c | 7 +++++-- 3 files changed, 27 insertions(+), 3 deletions(-) -- 2.1.4