diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2018-10-08 11:20:17 +0100 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2018-10-08 11:20:17 +0100 |
| commit | bb94c11985a449dbbf47924637276b444857300c (patch) | |
| tree | 062872e726ff3778123630e59c12ed33c1523802 /slirp/socket.c | |
| parent | df51a005192ee40b469c9714d451bf49b6eb7fa7 (diff) | |
| parent | 93a972f8548571d35c718ca3a94d5ab1507b2443 (diff) | |
| download | focaccia-qemu-bb94c11985a449dbbf47924637276b444857300c.tar.gz focaccia-qemu-bb94c11985a449dbbf47924637276b444857300c.zip | |
Merge remote-tracking branch 'remotes/thibault/tags/samuel-thibault' into staging
slirp updates
Andrew Oates (1):
slirp: fix ICMP handling on macOS hosts
Gavin Grant (1):
slirp: Propagate host TCP RST packet to the guest after socket
disconnected
Peter Maydell (1):
slirp: document mbuf pointers and sizes
# gpg: Signature made Sun 07 Oct 2018 19:04:13 BST
# gpg: using RSA key E3F65A9E9560DB4C
# gpg: Good signature from "Samuel Thibault <samuel.thibault@aquilenet.fr>"
# gpg: aka "Samuel Thibault <sthibault@debian.org>"
# gpg: aka "Samuel Thibault <samuel.thibault@gnu.org>"
# gpg: aka "Samuel Thibault <samuel.thibault@inria.fr>"
# gpg: aka "Samuel Thibault <samuel.thibault@labri.fr>"
# gpg: aka "Samuel Thibault <samuel.thibault@ens-lyon.org>"
# gpg: aka "Samuel Thibault <samuel.thibault@u-bordeaux.fr>"
# gpg: WARNING: This key is not certified with sufficiently trusted signatures!
# gpg: It is not certain that the signature belongs to the owner.
# Primary key fingerprint: 900C B024 B679 31D4 0F82 304B D017 8C76 7D06 9EE6
# Subkey fingerprint: 33FA 7B64 6195 01F8 CE9C 8F97 E3F6 5A9E 9560 DB4C
* remotes/thibault/tags/samuel-thibault:
slirp: Propagate host TCP RST packet to the guest after socket disconnected
slirp: fix ICMP handling on macOS hosts
slirp: document mbuf pointers and sizes
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'slirp/socket.c')
| -rw-r--r-- | slirp/socket.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/slirp/socket.c b/slirp/socket.c index 08fe98907d..322383a1f9 100644 --- a/slirp/socket.c +++ b/slirp/socket.c @@ -204,12 +204,19 @@ soread(struct socket *so) return 0; else { int err; - socklen_t slen = sizeof err; + socklen_t elen = sizeof err; + struct sockaddr_storage addr; + struct sockaddr *paddr = (struct sockaddr *) &addr; + socklen_t alen = sizeof addr; err = errno; if (nn == 0) { - getsockopt(so->s, SOL_SOCKET, SO_ERROR, - &err, &slen); + if (getpeername(so->s, paddr, &alen) < 0) { + err = errno; + } else { + getsockopt(so->s, SOL_SOCKET, SO_ERROR, + &err, &elen); + } } DEBUG_MISC((dfd, " --- soread() disconnected, nn = %d, errno = %d-%s\n", nn, errno,strerror(errno))); |