Example #1
0
bufferevent * connect_by_host(struct event_base *base, const char * host,int port)
{
	bufferevent * bev =NULL;
	do 
	{
		struct evdns_base *dns_base = evdns_base_new(base, 1);
		char * fname = evdns_get_default_hosts_filename();
		if (0!=evdns_base_load_hosts(dns_base, fname))
		{
			printf("evdns_base_load_hosts failed! \n");
		}		
		if (fname)
			free(fname);

		bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
		if (NULL==bev)
		{
			printf("bufferevent_socket_new failed! \n");
			break;
		}
		printf("++++ bufferevent_socket_new %p \n", bev);

		bufferevent_setcb(bev, readcb, writecb, eventcb, NULL);
		bufferevent_enable(bev, EV_READ|EV_WRITE);

		connected =0;
		int rt =bufferevent_socket_connect_hostname(bev, NULL, AF_INET, host, port);
	} while (0);
	return bev;
}
Example #2
0
static void
test_getaddrinfo_async(void *arg)
{
	struct basic_test_data *data = arg;
	struct evutil_addrinfo hints, *a;
	struct gai_outcome local_outcome;
	struct gai_outcome a_out[12];
	int i;
	struct evdns_getaddrinfo_request *r;
	char buf[128];
	struct evdns_server_port *port = NULL;
	ev_uint16_t dns_port = 0;
	int n_dns_questions = 0;

	struct evdns_base *dns_base = evdns_base_new(data->base, 0);

	/* for localhost */
	evdns_base_load_hosts(dns_base, NULL);

	memset(a_out, 0, sizeof(a_out));

	n_gai_results_pending = 10000; /* don't think about exiting yet. */

	/* 1. Try some cases that will never hit the asynchronous resolver. */
	/* 1a. Simple case with a symbolic service name */
	memset(&hints, 0, sizeof(hints));
	hints.ai_family = PF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;
	memset(&local_outcome, 0, sizeof(local_outcome));
	r = evdns_getaddrinfo(dns_base, "1.2.3.4", "http",
	    &hints, gai_cb, &local_outcome);
	tt_int_op(r,==,0);
	if (!local_outcome.err) {
		tt_ptr_op(local_outcome.ai,!=,NULL);
		test_ai_eq(local_outcome.ai, "1.2.3.4:80", SOCK_STREAM, IPPROTO_TCP);
		evutil_freeaddrinfo(local_outcome.ai);
		local_outcome.ai = NULL;
	} else {