Exemple #1
0
struct evdns_server_port *
regress_get_dnsserver(struct event_base *base,
    ev_uint16_t *portnum,
    evutil_socket_t *psock,
    evdns_request_callback_fn_type cb,
    void *arg)
{
	struct evdns_server_port *port = NULL;
	evutil_socket_t sock;
	struct sockaddr_in my_addr;

	sock = socket(AF_INET, SOCK_DGRAM, 0);
	if (sock <= 0) {
		tt_abort_perror("socket");
	}

	evutil_make_socket_nonblocking(sock);

	memset(&my_addr, 0, sizeof(my_addr));
	my_addr.sin_family = AF_INET;
	my_addr.sin_port = htons(*portnum);
	my_addr.sin_addr.s_addr = htonl(0x7f000001UL);
	if (bind(sock, (struct sockaddr*)&my_addr, sizeof(my_addr)) < 0) {
		tt_abort_perror("bind");
	}
	port = evdns_add_server_port_with_base(base, sock, 0, cb, arg);
	if (!*portnum)
		*portnum = regress_get_socket_port(sock);
	if (psock)
		*psock = sock;

	return port;
end:
	return NULL;
}
Exemple #2
0
bool
f4dns_init(f4dns_ctx_t *ctx) {
    ctx->dns_base = evdns_base_new( ctx->f4->base, 1 );
    assert( ctx->dns_base != NULL );

    ctx->sock = socket(ctx->f4->listen_dns.ss_family, SOCK_DGRAM, 0);
    evutil_make_socket_nonblocking(ctx->sock);

    if( bind(ctx->sock, (struct sockaddr*)&ctx->f4->listen_dns, ctx->f4->listen_dns_sz) != 0 ) {
        perror("Cannot bind() DNS socket");
        return false;
    }

    ctx->server = evdns_add_server_port_with_base(ctx->f4->base, ctx->sock, 0, _f4dns_cb_dnsserver, ctx);

    return true;
}
Exemple #3
0
void proxyService()
{
    struct event_base *event_base = NULL;
    //struct evdns_base *evdns_base = NULL;
    event_base = event_base_new();
    //evdns_base = evdns_base_new(event_base, 0);
    evutil_socket_t sock;
    struct sockaddr_in my_addr;
    sock = socket(PF_INET, SOCK_DGRAM, 0);
    if(sock == -1) {
        printf("socket create error\n");
        return;
    }
    evutil_make_socket_nonblocking(sock);
    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(53);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    if(bind(sock, (struct sockaddr*)&my_addr, sizeof(my_addr))<0) {
        printf("bind error\n");
        return;
    }
    evdns_add_server_port_with_base(event_base, sock, 0, evdns_server_callback, NULL);
    event_base_dispatch(event_base);
}