Example #1
0
int adns_wait_poll(adns_state ads,
		   adns_query *query_io,
		   adns_answer **answer_r,
		   void **context_r) {
  int r, nfds, to;
  struct pollfd fds[MAX_POLLFDS];
  
  adns__consistency(ads,0,cc_entex);

  for (;;) {
    r= adns__internal_check(ads,query_io,answer_r,context_r);
    if (r != EAGAIN) goto xit;
    nfds= MAX_POLLFDS; to= -1;
    adns_beforepoll(ads,fds,&nfds,&to,0);
    r= poll(fds,nfds,to);
    if (r == -1) {
      if (errno == EINTR) {
	if (ads->iflags & adns_if_eintr) { r= EINTR; goto xit; }
      } else {
	adns__diag(ads,-1,0,"poll failed in wait: %s",strerror(errno));
	adns_globalsystemfailure(ads);
      }
    } else {
      assert(r >= 0);
      adns_afterpoll(ads,fds,nfds,0);
    }
  }

 xit:
  adns__consistency(ads,0,cc_entex);
  return r;
}
Example #2
0
static void
adns_tx_callback(int fd,void *state){
	struct pollfd pfd = {
		.events = POLLOUT,
		.revents = POLLOUT,
		.fd = fd,
	};
	struct timeval now;

	if(gettimeofday(&now,NULL)){
		// FIXME what?
	}
	adns_afterpoll(state,&pfd,1,&now); // FIXME add back?
}