STATIC void DHCPv6SocketReleaseGlobals(DHCPv6SocketGlobalsRef * globals_p) { DHCPv6SocketGlobalsRef globals; if (globals_p == NULL) { return; } globals = *globals_p; if (globals == NULL) { return; } *globals_p = NULL; dynarray_free(&globals->sockets); FDCalloutRelease(&globals->read_fd); timer_callout_free(&globals->timer_callout); bzero(globals, sizeof(*globals)); free(globals); return; }
static void DHCPv6SocketDelayedClose(void * arg1, void * arg2, void * arg3) { if (S_globals->read_fd == NULL) { my_log(LOG_ERR, "DHCPv6SocketDelayedClose(): socket is already closed"); return; } if (S_globals->read_fd_refcount > 0) { my_log(LOG_ERR, "DHCPv6SocketDelayedClose(): called when socket in use"); return; } my_log(LOG_DEBUG, "DHCPv6SocketDelayedClose(): closing DHCPv6 socket %d", FDCalloutGetFD(S_globals->read_fd)); /* this closes the file descriptor */ FDCalloutRelease(&S_globals->read_fd); return; }
STATIC void RTADVSocketDelayedClose(void * arg1, void * arg2, void * arg3) { if (S_globals->read_fd == NULL) { my_log(LOG_NOTICE, "RTADVSocketDelayedClose(): socket is already closed"); return; } if (S_globals->read_fd_refcount > 0) { my_log(LOG_NOTICE, "RTADVSocketDelayedClose(): called when socket in use"); return; } my_log(LOG_INFO, "RTADVSocketDelayedClose(): closing RTADV socket %d", FDCalloutGetFD(S_globals->read_fd)); /* this closes the file descriptor */ FDCalloutRelease(&S_globals->read_fd); return; }