char clnt_res; void *foo = NULL; u_long i, j, pings_count, pings_max;
u_long i, j, pings_count, pings_max, fastest = -1;
__nis_findfastest (dir_binding *bind){#if 0  unsigned long i, j;  for (i = 0; i < bind->server_len; i++)    for (j = 0; j < bind->server_val[i].ep.ep_len; ++j)      if (strcmp (bind->server_val[i].ep.ep_val[j].family, "inet") == 0)	if ((bind->server_val[i].ep.ep_val[j].proto == NULL) ||	    (bind->server_val[i].ep.ep_val[j].proto[0] ==  '-') ||	    (bind->server_val[i].ep.ep_val[j].proto[0] == '\0'))	  {	    bind->server_used = i;	    bind->current_ep = j;	    return 1;	  }  return 0;#else  const struct timeval TIMEOUT50 = {5, 0};  const struct timeval TIMEOUT00 = {0, 0};  struct findserv_req *pings;  struct sockaddr_in sin, saved_sin;  int found = -1;  u_int32_t xid_seed, xid_lookup;  int sock, dontblock = 1;  CLIENT *clnt;  char clnt_res;  void *foo = NULL;  u_long i, j, pings_count, pings_max;  struct cu_data *cu;  pings_max = bind->server_len * 2;	/* Reserve a little bit more memory					   for multihomed hosts */  pings_count = 0;  pings = malloc (sizeof (struct findserv_req) * pings_max);  xid_seed = (u_int32_t) (time (NULL) ^ getpid ());  if (__builtin_expect (pings == NULL, 0))    return -1;  memset (&sin, '\0', sizeof (sin));  sin.sin_family = AF_INET;  for (i = 0; i < bind->server_len; i++)    for (j = 0; j < bind->server_val[i].ep.ep_len; ++j)      if (strcmp (bind->server_val[i].ep.ep_val[j].family, "inet") == 0)	if ((bind->server_val[i].ep.ep_val[j].proto == NULL) ||	    (bind->server_val[i].ep.ep_val[j].proto[0] == '-') ||	    (bind->server_val[i].ep.ep_val[j].proto[0] == '\0'))	  {	    sin.sin_addr.s_addr =	      inetstr2int (bind->server_val[i].ep.ep_val[j].uaddr);	    if (sin.sin_addr.s_addr == 0)	      continue;	    sin.sin_port = htons (__pmap_getnisport (&sin, NIS_PROG,						     NIS_VERSION,						     IPPROTO_UDP));	    if (sin.sin_port == 0)	      continue;	    if (pings_count >= pings_max)	      {		struct findserv_req *new_pings;		pings_max += 10;		new_pings = realloc (pings, sizeof (struct findserv_req) *				     pings_max);		if (__builtin_expect (new_pings == NULL, 0))		  {		    free (pings);		    return -1;		  }		pings = new_pings;	      }	    memcpy ((char *) &pings[pings_count].sin, (char *) &sin,		    sizeof (sin));	    memcpy ((char *)&saved_sin, (char *)&sin, sizeof(sin));	    pings[pings_count].xid = xid_seed;	    pings[pings_count].server_nr = i;	    pings[pings_count].server_ep = j;	    ++xid_seed;	    ++pings_count;	  }  /* Make sure at least one server was assigned */  if (pings_count == 0)    {      free (pings);      return -1;    }  /* Create RPC handle */  sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);  clnt = clntudp_create (&saved_sin, NIS_PROG, NIS_VERSION, TIMEOUT50, &sock);  if (clnt == NULL)    {      close (sock);      free (pings);      return -1;    }  auth_destroy (clnt->cl_auth);  clnt->cl_auth = authunix_create_default ();  cu = (struct cu_data *) clnt->cl_private;  clnt_control (clnt, CLSET_TIMEOUT, (char *) &TIMEOUT00);  ioctl (sock, FIONBIO, &dontblock);  /* Send to all servers the NULLPROC */  for (i = 0; i < pings_count; ++i)    {      /* clntudp_call() will increment, subtract one */      *((u_int32_t *) (cu->cu_outbuf)) = pings[i].xid - 1;      memcpy ((char *) &cu->cu_raddr, (char *) &pings[i].sin,	      sizeof (struct sockaddr_in));      /* Transmit to NULLPROC, return immediately. */      clnt_call (clnt, NULLPROC, (xdrproc_t) xdr_void, (caddr_t) foo,		 (xdrproc_t) xdr_void, (caddr_t) & clnt_res, TIMEOUT00);    }  /* Receive reply from NULLPROC asynchronously */  memset ((char *) &clnt_res, 0, sizeof (clnt_res));  clnt_call (clnt, NULLPROC, (xdrproc_t) NULL, (caddr_t) foo,	     (xdrproc_t) xdr_void, (caddr_t) &clnt_res, TIMEOUT00);  xid_lookup = *((u_int32_t *) (cu->cu_inbuf));  for (i = 0; i < pings_count; i++)    {      if (pings[i].xid == xid_lookup)	{	  bind->server_used = pings[i].server_nr;	  bind->current_ep = pings[i].server_ep;	  found = 1;	}    }  auth_destroy (clnt->cl_auth);  clnt_destroy (clnt);  close (sock);  free (pings);  return found;#endif}