Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}