static void tell_workers_to_exit(void) { apr_size_t len; int i = 0; mpm_state = AP_MPMQ_STOPPING; for (i = 0 ; i < ap_max_child_assigned; i++){ len = 4; if (apr_sendto(udp_sock, udp_sa, 0, "die!", &len) != APR_SUCCESS) break; } }
//--------------------------------------------------------------------- // itm_trysendto //--------------------------------------------------------------------- long itm_trysendto(int af) { struct ITMHUDP *head; struct sockaddr*remote; unsigned short dsize; unsigned short xsize; long total = 0; #ifdef AF_INET6 if (af == AF_INET6) { for (xsize = 1; xsize > 0; ) { if (itm_dgramdat6.size < 2) break; ims_peek(&itm_dgramdat6, &dsize, 2); ims_peek(&itm_dgramdat6, itm_zdata, dsize); remote = (struct sockaddr*)(itm_zdata + 2); head = (struct ITMHUDP*)(itm_zdata + ITM_ADDRSIZE6 + 2); xsize = dsize - ITM_ADDRSIZE6 - 2; xsize = apr_sendto(itm_dgram_sock6, (char*)head, xsize, 0, remote, ITM_ADDRSIZE6); if (xsize > 0) { ims_drop(&itm_dgramdat6, dsize); total += xsize; } } return total; } #endif for (xsize = 1; xsize > 0; ) { if (itm_dgramdat4.size < 2) break; ims_peek(&itm_dgramdat4, &dsize, 2); ims_peek(&itm_dgramdat4, itm_zdata, dsize); remote = (struct sockaddr*)(itm_zdata + 2); head = (struct ITMHUDP*)(itm_zdata + ITM_ADDRSIZE4 + 2); xsize = dsize - ITM_ADDRSIZE4 - 2; xsize = sendto(itm_dgram_sock4, (char*)head, xsize, 0, remote, ITM_ADDRSIZE4); if (xsize > 0) { ims_drop(&itm_dgramdat4, dsize); total += xsize; } } return total; }