./ MultiCS.r82 / th-dns.c
/////////////////////////////////////////////////////////////////////////////// // THREAD RESOLVE DNS /////////////////////////////////////////////////////////////////////////////// void *dns_child_thread(struct host_data *host) { unsigned int newip; pthread_mutex_lock(&prg.lockdns); newip = hostname2ip(host->name); pthread_mutex_unlock(&prg.lockdns); usleep(10000); if (!newip) { //debugf(" dns: failed to get address for %s\n",host->name); host->checkiptime = getseconds() + 60; host->ip = newip; } else if (newip!=host->ip) { host->checkiptime = getseconds() + 300; host->ip = newip; //debugf(" dns: %s --> %s\n", host->name, ip2string(host->ip)); } else { host->checkiptime = getseconds() + 600; //debugf(" dns: %s == %s\n", host->name, ip2string(host->ip)); } return NULL; } void *dns_thread(void *param) { prg.pid_dns = syscall(SYS_gettid); //prg.tid_dns = pthread_self(); prctl(PR_SET_NAME,"Lookup",0,0,0); do { pthread_mutex_lock(&prg.lockdnsth); struct host_data *host = cfg.host; while (host) { if (host->checkiptime<=getseconds()) { //pthread_t new_tid; //create_thread(&new_tid, (threadfn)dns_child_thread,host); dns_child_thread( host ); } host = host->next; } pthread_mutex_unlock(&prg.lockdnsth); sleep(10); } while (1); return NULL; } int start_thread_dns() { create_thread(&prg.tid_dns, (threadfn)dns_thread,NULL); return 0; }