aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2019-11-21 09:21:21 +0000
committerMarc-André Lureau <marcandre.lureau@gmail.com>2019-11-21 09:21:21 +0000
commit1cfbe0fe84337a879fdd7b2e4bb389340f8b5c8a (patch)
treeb4b012cf2977766fd60ba897d335e12e391619af
parentfe80a346505566c4ba46bbecee5a9085f2b2d016 (diff)
parent6d18d6ee651b40b52f59d6d3db4e65456e8435eb (diff)
downloadslirp-1cfbe0fe84337a879fdd7b2e4bb389340f8b5c8a.zip
slirp-1cfbe0fe84337a879fdd7b2e4bb389340f8b5c8a.tar.gz
slirp-1cfbe0fe84337a879fdd7b2e4bb389340f8b5c8a.tar.bz2
Merge branch 'fix-shutdown-wr' into 'master'
socket: avoid getpeername after shutdown(SHUT_WR) Closes #12 See merge request slirp/libslirp!19
-rw-r--r--src/socket.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/socket.c b/src/socket.c
index d96d8c4..2f20028 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -195,7 +195,9 @@ int soread(struct socket *so)
err = errno;
if (nn == 0) {
- if (getpeername(so->s, paddr, &alen) < 0) {
+ int shutdown_wr = so->so_state & SS_FCANTSENDMORE;
+
+ if (!shutdown_wr && getpeername(so->s, paddr, &alen) < 0) {
err = errno;
} else {
getsockopt(so->s, SOL_SOCKET, SO_ERROR, &err, &elen);