aboutsummaryrefslogtreecommitdiff
path: root/slirp/slirp.c
diff options
context:
space:
mode:
Diffstat (limited to 'slirp/slirp.c')
-rw-r--r--slirp/slirp.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 04d3dede23..33397c07dc 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -734,6 +734,29 @@ void if_encap(const uint8_t *ip_data, int ip_data_len)
}
}
+/* Unlistens a redirection
+ *
+ * Return value: number of redirs removed */
+int slirp_redir_rm(int is_udp, int host_port)
+{
+ struct socket *so;
+ struct socket *head = (is_udp ? &udb : &tcb);
+ int fport = htons(host_port);
+ int n = 0;
+
+ loop_again:
+ for (so = head->so_next; so != head; so = so->so_next) {
+ if (so->so_fport == fport) {
+ close(so->s);
+ sofree(so);
+ n++;
+ goto loop_again;
+ }
+ }
+
+ return n;
+}
+
int slirp_redir(int is_udp, int host_port,
struct in_addr guest_addr, int guest_port)
{