static int init_finish(adns_state ads) { struct in_addr ia; struct protoent *proto; int r; if (!ads->nservers) { if (ads->diagfile && ads->iflags & adns_if_debug) fprintf(ads->diagfile,"adns: no nameservers, using localhost\n"); ia.s_addr= htonl(INADDR_LOOPBACK); addserver(ads,ia); } proto= getprotobyname("udp"); if (!proto) { r= ENOPROTOOPT; goto x_free; } ads->udpsocket= socket(AF_INET,SOCK_DGRAM,proto->p_proto); if (ads->udpsocket<0) { r= errno; goto x_free; } r= adns__setnonblock(ads,ads->udpsocket); if (r) { r= errno; goto x_closeudp; } return 0; x_closeudp: close(ads->udpsocket); x_free: free(ads); return r; }
static int init_finish(adns_state ads) { struct in_addr ia; int r; if (!ads->nservers) { #if 0 if (ads->diagfile && ads->iflags & adns_if_debug) fprintf(ads->diagfile,"adns: no nameservers, using localhost\n"); #endif ia.s_addr= htonl(INADDR_LOOPBACK); addserver(ads,ia); } ads->udpsocket = comm_open(AF_INET, SOCK_DGRAM, 0, "UDP Resolver socket"); if (ads->udpsocket<0) { ilog(L_CRIT, "Failed to open socket"); r= errno; goto x_free; } r= adns__setnonblock(ads,ads->udpsocket); if (r) { ilog(L_CRIT, "Failed to make socket non-blocking"); r= errno; goto x_closeudp; } return 0; x_closeudp: fd_close(ads->udpsocket); x_free: MyFree(ads); ilog(L_CRIT, "Returning from init_finish: r = %d", r); return r; }