diff options
-rw-r--r-- | slirp/slirp.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/slirp/slirp.c b/slirp/slirp.c index a918232..ad88121 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -761,12 +761,16 @@ int slirp_remove_hostfwd(int is_udp, int host_port) { struct socket *so; struct socket *head = (is_udp ? &udb : &tcb); - int fport = htons(host_port); + struct sockaddr_in addr; + int port = htons(host_port); + socklen_t addr_len; int n = 0; loop_again: for (so = head->so_next; so != head; so = so->so_next) { - if (so->so_fport == fport) { + addr_len = sizeof(addr); + if (getsockname(so->s, (struct sockaddr *)&addr, &addr_len) == 0 && + addr.sin_port == port) { close(so->s); sofree(so); n++; |