接口

GioSocketConnectable

描述 [源代码]

interface Gio.SocketConnectable : GObject.Object

描述一个或多个潜在套接字端点的对象实现GSocketConnectable。调用者可以使用g_socket_connectable_enumerate()来获取一个GSocketAddressEnumerator,尝试依次尝试每个套接字地址,直到成功,如下面的示例代码所示。

MyConnectionType *
connect_to_host (const char    *hostname,
                 guint16        port,
                 GCancellable  *cancellable,
                 GError       **error)
{
  MyConnection *conn = NULL;
  GSocketConnectable *addr;
  GSocketAddressEnumerator *enumerator;
  GSocketAddress *sockaddr;
  GError *conn_error = NULL;

  addr = g_network_address_new (hostname, port);
  enumerator = g_socket_connectable_enumerate (addr);
  g_object_unref (addr);

  // Try each sockaddr until we succeed. Record the first connection error,
  // but not any further ones (since they'll probably be basically the same
  // as the first).
  while (!conn && (sockaddr = g_socket_address_enumerator_next (enumerator, cancellable, error))
    {
      conn = connect_to_sockaddr (sockaddr, conn_error ? NULL : &conn_error);
      g_object_unref (sockaddr);
    }
  g_object_unref (enumerator);

  if (conn)
    {
      if (conn_error)
        {
          // We couldn't connect to the first address, but we succeeded
          // in connecting to a later address.
          g_error_free (conn_error);
        }
      return conn;
    }
  else if (error)
    {
      /// Either initial lookup failed, or else the caller cancelled us.
      if (conn_error)
        g_error_free (conn_error);
      return NULL;
    }
  else
    {
      g_error_propagate (error, conn_error);
      return NULL;
    }
}

必备条件

为了实现SocketConnectable,您的类型必须继承自GObject

实例方法

g_socket_connectable_enumerate

connectable创建一个GSocketAddressEnumerator

自:2.22

g_socket_connectable_proxy_enumerate

connectable创建一个将返回每个地址的GProxyAddressGSocketAddressEnumerator,您必须通过代理连接到这些地址。

自:2.26

g_socket_connectable_to_string

GSocketConnectable格式化为字符串。这是一个用于调试输出的人类可读格式,不是稳定的序列化格式。它不适合在用户界面中使用,因为它会向用户暴露太多信息。

自:2.48

接口结构

struct GioSocketConnectableIface {
  GTypeInterface g_iface;
  GSocketAddressEnumerator* (* enumerate) (
    GSocketConnectable* connectable
  );
  GSocketAddressEnumerator* (* proxy_enumerate) (
    GSocketConnectable* connectable
  );
  gchar* (* to_string) (
    GSocketConnectable* connectable
  );
  
}

提供返回一个GSocketAddressEnumeratorGProxyAddressEnumerator的接口。

接口成员
g_iface
GTypeInterface
 

父接口。

enumerate
GSocketAddressEnumerator* (* enumerate) (
    GSocketConnectable* connectable
  )
 

创建一个GSocketAddressEnumerator

proxy_enumerate
GSocketAddressEnumerator* (* proxy_enumerate) (
    GSocketConnectable* connectable
  )
 

创建一个GProxyAddressEnumerator

to_string
gchar* (* to_string) (
    GSocketConnectable* connectable
  )
 

将连接的地址格式化为字符串以供调试。实现此方法是可选的。(自:2.48)。

虚拟方法

Gio.SocketConnectable.enumerate

connectable创建一个GSocketAddressEnumerator

自:2.22

Gio.SocketConnectable.proxy_enumerate

connectable创建一个将返回每个地址的GProxyAddressGSocketAddressEnumerator,您必须通过代理连接到这些地址。

自:2.26

Gio.SocketConnectable.to_string

GSocketConnectable格式化为字符串。这是一个用于调试输出的人类可读格式,不是稳定的序列化格式。它不适合在用户界面中使用,因为它会向用户暴露太多信息。

自:2.48