GioSocketService

since: 2.22

说明 [src]

class Gio.SocketService : Gio.SocketListener
{
  priv: GSocketServicePrivate*
}

GSocketService 是表示是为网络提供还是通过本地套接字提供服务的对象的 服务。

GSocketServiceGSocketListener 的子类,您需要使用 GSocketListener API 添加希望接受连接的地址。

有两种基于 GSocketService 实现网络服务的方法。首先,使用 g_socket_service_new() 创建服务,并连接到 GSocketService::incoming 信号。第二种方法是构造 GSocketService 的子类并覆盖默认信号处理程序 实现。

在任何情况下,处理程序都必须立即返回,否则将阻止处理其他传入连接。如果您有兴趣编写包含阻止代码的连接处理程序,请参见 GThreadedSocketService

套接字服务在创建线程的主循环中运行(请参见 g_main_context_push_thread_default()),并且通常不是线程安全的。但是,启动和停止服务的调用是线程安全的,因此可以从处理传入 客户端的线程中使用这些调用。

从 2.22 开始提供

构造函数

g_socket_service_new

不创建需要侦听的套接字,创建一个新的 GSocketService。可以使用例如 g_socket_listener_add_address() 或 g_socket_listener_add_inet_port() 添加新侦听器。

since: 2.22

实例方法

g_socket_service_is_active

检查服务是否处于活动状态。处于活动状态的服务将接受连接的新客户端,而处于非活动状态的服务将让连接中的客户端排队,直到服务 启动。

since: 2.22

g_socket_service_start

重新启动服务,即在主循环运行时从已添加的套接字开始接受连接。仅在由 g_socket_service_stop() 停止服务之后才需要调用此函数。

since: 2.22

g_socket_service_stop

停止服务,即在主循环 运行时停止接受已添加套接字的连接。

since: 2.22

GSocketListener (12) 继承的方法
g_socket_listener_accept

阻塞,等待客户端连接到添加到侦听器的任何套接字。返回针对已 接受的套接字的 GSocketConnection

since: 2.22

g_socket_listener_accept_async

这是 g_socket_listener_accept() 的异步版本。

since: 2.22

g_socket_listener_accept_finish

完成异步接受操作。请参见 g_socket_listener_accept_async()。

since: 2.22

g_socket_listener_accept_socket

阻塞,等待客户端连接到添加到侦听器的任何套接字。返回已 接受的 GSocket

since: 2.22

g_socket_listener_accept_socket_async

这是 g_socket_listener_accept_socket() 的异步版本。

since: 2.22

g_socket_listener_accept_socket_finish

完成异步接受操作。请参阅 g_socket_listener_accept_socket_async()。

since: 2.22

g_socket_listener_add_address

创建类型为 type 且协议为 protocol 的套接字,将其绑定到 address,并将其添加到我们接受套接字的套接字集中。

since: 2.22

g_socket_listener_add_any_inet_port

在任何可用的端口号上侦听 IPv6 和 IPv4(如果每个都可用)的 TCP 连接。

自:2.24

g_socket_listener_add_inet_port

g_socket_listener_add_address() 的帮助函数,它在所有接口上的指定端口上创建在 IPv4 和 IPv6(如果受支持)上侦听的 TCP/IP 套接字。

since: 2.22

g_socket_listener_add_socket

socket 添加到我们尝试接受新客户端的套接字集中。该套接字应绑定到本地地址并被侦听。

since: 2.22

g_socket_listener_close

关闭侦听器中的所有套接字。

since: 2.22

g_socket_listener_set_backlog

设置监听器中套接字的监听积压。在将任何套接字、地址或端口添加到 GSocketListener(例如通过调用 g_socket_listener_add_inet_port())之前,必须调用此函数才能生效。

since: 2.22

GObject (43) 继承的方法

有关方法的完整列表,请参阅 GObject

属性

Gio.SocketService:active

服务当前是否接受连接。

自:2.46

GSocketListener (1) 继承的属性
Gio.SocketListener:listen-backlog

监听队列中的未完成连接数。

since: 2.22

信号

Gio.SocketService::incoming

当需要处理与 service 的新传入连接时,将发出 ::incoming 信号。处理程序必须启动对 connection 的处理,但不得阻塞;从本质上说,必须使用异步操作。

since: 2.22

GSocketListener (1) 继承的信号
GSocketListener::event

listenersocket上的活动改变状态时发出的信号。请注意,当 listener 用于同时侦听 IPv4 和 IPv6 时,将为每个活动发出单独的信号集,并且发生的顺序是不确定的。

自:2.46

GObject (1) 继承的信号
GObject::notify

当对象的某个属性的值通过 g_object_set_property()、g_object_set() 等函数设置时,会发出 notify 信号。

类结构

struct GioSocketServiceClass {
  GSocketListenerClass parent_class;
  gboolean (* incoming) (
    GSocketService* service,
    GSocketConnection* connection,
    GObject* source_object
  );
  void (* _g_reserved1) (
void
  );
  void (* _g_reserved2) (
void
  );
  void (* _g_reserved3) (
void
  );
  void (* _g_reserved4) (
void
  );
  void (* _g_reserved5) (
void
  );
  void (* _g_reserved6) (
void
  );
  
}

GSocketService 的类结构。

类成员
parent_class: GSocketListenerClass

无可用描述。

incoming: gboolean (* incoming) ( GSocketService* service, GSocketConnection* connection, GObject* source_object )

当接受新连接时发出的信号。

_g_reserved1: void (* _g_reserved1) ( void )

无可用描述。

_g_reserved2: void (* _g_reserved2) ( void )

无可用描述。

_g_reserved3: void (* _g_reserved3) ( void )

无可用描述。

_g_reserved4: void (* _g_reserved4) ( void )

无可用描述。

_g_reserved5: void (* _g_reserved5) ( void )

无可用描述。

_g_reserved6: void (* _g_reserved6) ( void )

无可用描述。

虚拟方法

Gio.SocketServiceClass.incoming

当接受新连接时发出的信号。