コード例 #1
0
ファイル: connections.c プロジェクト: AdKwiatkos/ekg2
GCancellable *ekg_connection_starter_run(
		ekg_connection_starter_t cs,
		GSocketClient *sock,
		ekg_connection_callback_t callback,
		ekg_connection_failure_callback_t failure_callback,
		gpointer priv_data)
{
	cs->callback = callback;
	cs->failure_callback = failure_callback;
	cs->priv_data = priv_data;

	cs->cancellable = g_cancellable_new();
	cs->current_server = cs->servers;

	if (cs->bind_hostname) {
		GResolver *res = g_resolver_get_default();
		GList *addrs;
		GError *err = NULL;

		addrs = g_resolver_lookup_by_name(
				res,
				cs->bind_hostname,
				NULL,
				&err);

		if (!addrs) {
				/* XXX: delay calling that */
			failed_async_connect(sock, err, cs);
			g_error_free(err);
			return cs->cancellable;
		}

		g_socket_client_set_local_address(sock,
				g_inet_socket_address_new(
					G_INET_ADDRESS(g_list_nth_data(addrs, 0)), 0));

		g_resolver_free_addresses(addrs);
		g_object_unref(res);
	}

		/* if we have the domain name, try SRV lookup first */
	if (cs->domain) {
		g_assert(cs->service);

			/* fallback to domainname lookup if 'servers' not set */
		if (!cs->servers || !cs->servers[0])
			ekg_connection_starter_set_servers(cs, cs->domain);

		debug_function("ekg_connection_start(), trying _%s._tcp.%s\n",
				cs->service, cs->domain);
		g_socket_client_connect_to_service_async(
				sock, cs->domain, cs->service,
				cs->cancellable,
				done_async_connect,
				cs);
	} else /* otherwise, just begin with servers */
		g_assert(setup_async_connect(sock, cs));

	return cs->cancellable;
}
コード例 #2
0
ファイル: gsocketclient.c プロジェクト: msakai/ruby-gnome2
static VALUE
rg_connect_to_service_async(int argc, VALUE *argv, VALUE self)
{
        VALUE rbdomain, rbservice, rbcancellable, block;
        GCancellable *cancellable;
        const gchar *domain;
        const gchar *service;

        rb_scan_args(argc, argv, "21&", &domain, &service, &rbcancellable, &block);
        domain = RVAL2CSTR(rbdomain);
        service = RVAL2CSTR(rbservice);
        cancellable = RVAL2GCANCELLABLE(rbcancellable);
        SAVE_BLOCK(block);
        g_socket_client_connect_to_service_async(_SELF(self),
                                                 domain,
                                                 service,
                                                 cancellable,
                                                 rbgio_async_ready_callback,
                                                 (gpointer)block);

        return self;
}