static gpointer sessions_cleaner_func(xr_server* server) { while (g_socket_service_is_active(G_SOCKET_SERVICE(server->service))) { server->current_time = time(NULL); g_static_rw_lock_writer_lock(&server->sessions_lock); g_hash_table_foreach_remove(server->sessions, _maybe_remove_servlet, server); g_static_rw_lock_writer_unlock(&server->sessions_lock); g_usleep(1000000); } return NULL; }
/** * Register the flare service port */ void create_service(gchar *address, uint16_t port, GCallback *callback, gulong *handler_id) { GSocketService *service = g_socket_service_new(); GInetAddress *inet_address = g_inet_address_new_from_string(address); GSocketAddress *socket_address = g_inet_socket_address_new(inet_address, port); g_socket_listener_add_address( G_SOCKET_LISTENER(service), socket_address, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_TCP, NULL, NULL, NULL); g_object_unref(socket_address); g_object_unref(inet_address); *handler_id = g_signal_connect(service, "incoming", G_CALLBACK(callback), NULL); g_socket_service_start(service); g_assert(g_socket_service_is_active(service)); }
static VALUE socketservice_is_active(VALUE self) { return CBOOL2RVAL(g_socket_service_is_active(_SELF(self))); }