DNS/実装/KnotDNSresolver/iterative APIについて、ここに記述してください。
Example usage of the iterative API:
// Create request and its memory pool struct kr_request req = { .pool = { .ctx = mp_new (4096), .alloc = (mm_alloc_t) mp_alloc } }; // Setup and provide input query int state = kr_resolve_begin(&req, ctx, final_answer); state = kr_resolve_consume(&req, query); // Generate answer while (state == KNOT_STATE_PRODUCE) { // Additional query generate, do the I/O and pass back answer state = kr_resolve_produce(&req, &addr, &type, query); while (state == KNOT_STATE_CONSUME) { int ret = sendrecv(addr, proto, query, resp); // If I/O fails, make "resp" empty state = kr_resolve_consume(&request, addr, resp); knot_pkt_clear(resp); } knot_pkt_clear(query); } // "state" is either DONE or FAIL kr_resolve_finish(&request, state);