Exemplo n.º 1
0
void CSocket::Connect(const CSocketAddress& addr)
{
	int ret=::connect(m_s,&addr.getImp(),addr.getImpSize());
	if(ret<0)throw connect_failed(L"connect failed");

	current_address=addr;
}
Exemplo n.º 2
0
void bev_connect_cb(struct bufferevent* bev, short events, void* arg)
{
	jsonrpc_server_t* server = (jsonrpc_server_t*)arg;
	if(!arg) {
		ERR("Trying to connect null server\n");
		return;
	}

	if (events & (BEV_EVENT_ERROR|BEV_EVENT_EOF)) {
		WARN("Connection error for %.*s:%d\n", STR(server->addr), server->port);
		if (events & BEV_EVENT_ERROR) {
			int err = bufferevent_socket_get_dns_error(bev);
			if(err) {
				ERR("DNS error for %.*s: %s\n",
					STR(server->addr), evutil_gai_strerror(err));
			}
		}
		goto failed;
	} else if(events & BEV_EVENT_CONNECTED) {

		if (server->status == JSONRPC_SERVER_CONNECTED) {
			return;
		}

		server->status = JSONRPC_SERVER_CONNECTED;
		INFO("Connected to host %.*s:%d\n",
				STR(server->addr), server->port);
	}

	return;

failed:
	connect_failed(server);
}
Exemplo n.º 3
0
void bev_connect(jsonrpc_server_t* server)
{
	if(!server) {
		ERR("Trying to connect null server\n");
		return;
	}

	INFO("Connecting to server %.*s:%d for conn %.*s.\n",
			STR(server->addr), server->port, STR(server->conn));

	server->bev = bufferevent_socket_new(
			global_ev_base,
			-1,
			BEV_OPT_CLOSE_ON_FREE);
	if(!(server->bev)) {
		ERR("Could not create bufferevent for  %.*s:%d\n", STR(server->addr), server->port);
		connect_failed(server);
		return;
	}

	bufferevent_setcb(
			server->bev,
			bev_read_cb,
			NULL,
			bev_connect_cb,
			server);
	bufferevent_enable(server->bev, EV_READ|EV_WRITE);
	if(bufferevent_socket_connect_hostname(
			server->bev,
			global_evdns_base,
			AF_UNSPEC,
			server->addr.s,
			server->port)<0) {
		WARN("Failed to connect to %.*s:%d\n", STR(server->addr), server->port);
		connect_failed(server);
	}
}