Example #1
0
int main(int argc, char * argv[])
{
    gflags::ParseCommandLineFlags(&argc, &argv, false); 

    int num = FLAGS_task_num;

    std::vector<ip_port_t> ip_list;
    parse_ip_list(FLAGS_server_addr, &ip_list);
    if (ip_list.empty()) {
        fprintf(stderr, "server_addr:%s, format error!", FLAGS_server_addr.c_str());
        return 1;
    }

    if (prepare_data(FLAGS_data_file.c_str())) {
        PLOG_ERROR("read data failed!");
        return 1;
    }

    tasks = new ::task_t[num];
    for (int i=0; i<num; ++i) {
        tasks[i].ip = ip_list[0].ip;
        tasks[i].port = ip_list[0].port;
        tasks[i].file = FLAGS_data_file;
        tasks[i].co = conet::alloc_coroutine(proc_send, tasks+i);
        tasks[i].data = &g_data;
        resume(tasks[i].co);
    }

    while (g_finish_task_num < FLAGS_task_num) {
        conet::dispatch();
    }

    return 0;
}
int
dcplugin_init(DCPlugin * const dcplugin, int argc, char *argv[])
{
    Blocking *blocking;
    int       opt_flag;
    int       option_index = 0;

    if ((blocking = calloc((size_t) 1U, sizeof *blocking)) == NULL) {
        return -1;
    }
    dcplugin_set_user_data(dcplugin, blocking);
    blocking->fp = NULL;
    blocking->domains = NULL;
    blocking->domains_rev = NULL;
    blocking->domains_substr = NULL;
    blocking->ips = NULL;
    blocking->ltsv = 0;
    optind = 0;
#ifdef _OPTRESET
    optreset = 1;
#endif
    while ((opt_flag = getopt_long(argc, argv,
                                   getopt_options, getopt_long_options,
                                   &option_index)) != -1) {
        switch (opt_flag) {
        case 'd':
            if (parse_domain_list(&blocking->domains, &blocking->domains_rev,
                                  &blocking->domains_substr, optarg) != 0) {
                return -1;
            }
            break;
        case 'i':
            if (parse_ip_list(&blocking->ips, optarg) != 0) {
                return -1;
            }
            break;
        case 'l':
            if (strncmp(optarg, "ltsv:", (sizeof "ltsv:") - 1U) == 0) {
                blocking->ltsv = 1;
                optarg += (sizeof "ltsv:") - 1U;
            }
            if ((blocking->fp = fopen(optarg, "a")) == NULL) {
                return -1;
            }
            break;
        default:
            return -1;
        }
    }
    return 0;
}
Example #3
0
int main(int argc, char **argv) {
    fd_set readset, errorset;
    int max_fd;

    memset(&id_addr_queue, 0, sizeof(id_addr_queue));
    memset(&delay_queue, 0, sizeof(delay_queue));
    if (0 != parse_args(argc, argv))
        return EXIT_FAILURE;
    if (0 != parse_ip_list())
        return EXIT_FAILURE;
    if (0 != parse_chnroute())
        return EXIT_FAILURE;
    if (0 != resolve_dns_servers())
        return EXIT_FAILURE;
    if (0 != dns_init_sockets())
        return EXIT_FAILURE;

    printf("%s\n", version);
    max_fd = MAX(local_sock, remote_sock) + 1;
    while (1) {
        FD_ZERO(&readset);
        FD_ZERO(&errorset);
        FD_SET(local_sock, &readset);
        FD_SET(local_sock, &errorset);
        FD_SET(remote_sock, &readset);
        FD_SET(remote_sock, &errorset);
        struct timeval timeout = {
            .tv_sec = 1,
            .tv_usec = 0,
        };
        if (-1 == select(max_fd, &readset, NULL, &errorset, &timeout)) {
            ERR("select");
            return EXIT_FAILURE;
        }
        check_and_send_delay();
        if (FD_ISSET(local_sock, &errorset)) {
            // TODO getsockopt(..., SO_ERROR, ...);
            VERR("local_sock error\n");
            return EXIT_FAILURE;
        }
        if (FD_ISSET(remote_sock, &errorset)) {
            // TODO getsockopt(..., SO_ERROR, ...);
            VERR("remote_sock error\n");
            return EXIT_FAILURE;
        }
        if (FD_ISSET(local_sock, &readset))
            dns_handle_local();
        if (FD_ISSET(remote_sock, &readset))
            dns_handle_remote();
    }
    return EXIT_SUCCESS;
}

static int setnonblock(int sock) {
    int flags;
    flags = fcntl(sock, F_GETFL, 0);
    if (flags == -1) {
        ERR("fcntl");
        return -1;
    }
    if (-1 == fcntl(sock, F_SETFL, flags | O_NONBLOCK)) {
        ERR("fcntl");
        return -1;
    }
    return 0;
}