diff options
author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2019-11-21 09:21:21 +0000 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@gmail.com> | 2019-11-21 09:21:21 +0000 |
commit | 1cfbe0fe84337a879fdd7b2e4bb389340f8b5c8a (patch) | |
tree | b4b012cf2977766fd60ba897d335e12e391619af | |
parent | fe80a346505566c4ba46bbecee5a9085f2b2d016 (diff) | |
parent | 6d18d6ee651b40b52f59d6d3db4e65456e8435eb (diff) | |
download | slirp-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.c | 4 |
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); |