Exemple #1
0
const struct addrinfo * get_one_host(const char * name) {
    struct addrinfo * res;
    struct addrinfo hints;
    
    bzero(&hints, sizeof(hints));
    
    // This is the family and protocol, since we are making DNS probes on UDP.
    hints.ai_family = PF_INET;
    hints.ai_protocol = IPPROTO_UDP;
    
    int ret = getaddrinfo(name, service, &hints, &res);
    LOG(1, "getaddrinfo(\"%s\", \"%s\", %p, %p) == %d", name, service, &hints, &res, ret);
    
    if (0 > ret) DIE(EX_OSERR, "getaddrinfo");
    
    for (struct addrinfo * i = res; NULL != i; i = i->ai_next) {
        LOG(2, "res:          { ai_flags: %d, ai_family: %d, ai_socktype: %d, ai_protocol: %d, ai_addrlen: %d, ai_addr: %p, ai_canonname: %s }",
            i->ai_flags, i->ai_family, i->ai_socktype, i->ai_protocol, i->ai_addrlen, i->ai_addr, i->ai_canonname);
    }
    if (NULL != res->ai_next) DIEx(EX_SOFTWARE, "more than one addr from getaddrinfo");
    
    struct sockaddr_in * in = (struct sockaddr_in *)res->ai_addr;
    LOG(2, "res->ai_addr: { sin_len: %hhu, sin_family: %hhu, sin_port: %hu, sin_addr.s_addr: %hhu.%hhu.%hhu.%hhu }",
        in->sin_len,
        in->sin_family,
        htons(in->sin_port),
        ((u_char *)&(in->sin_addr.s_addr))[0],
        ((u_char *)&(in->sin_addr.s_addr))[1],
        ((u_char *)&(in->sin_addr.s_addr))[2],
        ((u_char *)&(in->sin_addr.s_addr))[3]);

    return res;
}
void 
monitor_init_thread_support(void)
{
  int rval;
  if ((rval = PAPI_thread_init(pthread_self)) != PAPI_OK) {
    DIEx("error: PAPI error (%d): %s.", rval, PAPI_strerror(rval));
  }
}