X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/94a1d5fce6a68fce8216d4b45ef6148d353c2c3a..32654a316b5925914f5e5f481971d47f9728edab:/udp.c diff --git a/udp.c b/udp.c index 706e077..e62f5c1 100644 --- a/udp.c +++ b/udp.c @@ -340,6 +340,19 @@ void udp_socks_deregister(struct udpcommon *uc, struct udpsocks *socks) deregister_for_poll(socks->interest); } +void udp_socks_childpersist(struct udpcommon *uc, struct udpsocks *socks) +{ + int i; + for (i=0; in_socks; i++) + udp_destroy_socket(uc,&socks->socks[i]); +} + +static void udp_childpersist_hook(void *sst, uint32_t new_phase) +{ + struct udp *st=sst; + udp_socks_childpersist(&st->uc,&st->socks); +} + static void udp_phase_hook(void *sst, uint32_t new_phase) { struct udp *st=sst; @@ -350,6 +363,8 @@ static void udp_phase_hook(void *sst, uint32_t new_phase) udp_make_socket(uc,&socks->socks[i],M_FATAL); udp_socks_register(uc,socks); + + add_hook(PHASE_CHILDPERSIST,udp_childpersist_hook,st); } static list_t *udp_apply(closure_t *self, struct cloc loc, dict_t *context,