void run_loop(t_serveur *serveur) { fd_set read_set; fd_set write_set; int bigger; while (1) { bigger = build_set(serveur, &read_set); build_set(serveur, &write_set); if (select(bigger + 1, &read_set, &write_set, 0, 0) < 0) continue; if (FD_ISSET(0, &read_set)) serveur_command(serveur); if (FD_ISSET(serveur->fd, &read_set)) connect_client(serveur); loop_clients(serveur, &read_set, &write_set); } }
ptrdiff_t tree_set_store::find_set(ptrdiff_t child_l,ptrdiff_t child_r) { ptrdiff_t hc = hash(child_l,child_r,hashmask); for (ptrdiff_t i=hashtable[hc]; i!=EMPTY_LIST; i=buckets[i].next) { if (buckets[i].child_l==child_l && buckets[i].child_r==child_r) { return i; } } return build_set(child_l,child_r); }