static void interval_timer_event( void *user_data ) { UNUSED( user_data ); struct timespec now; dlist_element *dlist, *next; probe_timer_entry *entry; for ( dlist = probe_timer_table->next; dlist != NULL; dlist = next ) { next = dlist->next; entry = dlist->data; get_current_time( &now ); if ( timespec_le( &( entry->expires ), &now ) ) { if ( dlist == probe_timer_last ) { probe_timer_last = dlist->prev; } delete_dlist_element( dlist ); probe_request( entry, PROBE_TIMER_EVENT_TIMEOUT, 0, 0 ); } else { #if 0 set_interval_timer(); #endif return; } } }
void demon_receiver(int sockfd){ ssize_t recv_len; struct sockaddr_in recv_addr; socklen_t len=sizeof(recv_addr); unsigned short *msg_type; void *recvbuf = malloc(D2MCED_BUFF_SIZE); //recv buf while(1) { recv_len = recvfrom(sockfd, recvbuf, D2MCED_BUFF_SIZE, 0, (struct sockaddr *) &recv_addr, &len); msg_type = (unsigned short*)recvbuf; //check the require, and data length to process if( *msg_type == MSG_JOIN_REQ && recv_len == (sizeof(struct join_s2d_req) +((struct join_s2d_req*)recvbuf)->app_len+((struct join_s2d_req*)recvbuf)->group_len)) { join_request(recvbuf, sockfd, recv_addr); } else if(*msg_type == MSG_FINALIZE && recv_len == sizeof(struct finalize_s2d_req)) { finalize_request(recvbuf, sockfd, recv_addr); } else if(*msg_type == MSG_PROBE_REQ && recv_len == (sizeof(struct probe_s2d_req) +((struct probe_s2d_req*)recvbuf)->app_len+((struct probe_s2d_req*)recvbuf)->group_len)) { probe_request(recvbuf, sockfd, recv_addr); } else if(*msg_type == MSG_NEWMAIN_MANAGER && recv_len == (sizeof(struct main_s2d_req) +((struct main_s2d_req*)recvbuf)->app_len+((struct main_s2d_req*)recvbuf)->group_len)) { new_manager_request(recvbuf, sockfd, recv_addr); } //init data msg_type = 0; } free(recvbuf); close(sockfd); }