summaryrefslogtreecommitdiffstats
path: root/slirp/socket.c
diff options
context:
space:
mode:
authorSteven Luo <steven+qemu@steven676.net>2016-04-06 22:04:55 -0700
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 20:01:35 -0600
commit2cd07e60d19c389bea7ce3995fa74a01193dd35d (patch)
treee6d69e4ea108fae465e111bb2e5c77be621daf9a /slirp/socket.c
parentc9e5de4de2bc2cc3dda7e368af5f4eef8c9c607a (diff)
downloadhqemu-2cd07e60d19c389bea7ce3995fa74a01193dd35d.zip
hqemu-2cd07e60d19c389bea7ce3995fa74a01193dd35d.tar.gz
slirp: handle deferred ECONNREFUSED on non-blocking TCP sockets
slirp currently only handles ECONNREFUSED in the case where connect() returns immediately with that error; since we use non-blocking sockets, most of the time we won't receive the error until we later try to read from the socket. Ensure that we deliver the appropriate RST to the guest in this case. Signed-off-by: Steven Luo <steven+qemu@steven676.net> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Diffstat (limited to 'slirp/socket.c')
-rw-r--r--slirp/socket.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/slirp/socket.c b/slirp/socket.c
index 0d67b12..bd97b2d 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -188,7 +188,7 @@ soread(struct socket *so)
DEBUG_MISC((dfd, " --- soread() disconnected, nn = %d, errno = %d-%s\n", nn, errno,strerror(errno)));
sofcantrcvmore(so);
- if (err == ECONNRESET
+ if (err == ECONNRESET || err == ECONNREFUSED
|| err == ENOTCONN || err == EPIPE) {
tcp_drop(sototcpcb(so), err);
} else {
OpenPOWER on IntegriCloud