static void np_request_unqueued (SoupSession *session, SoupMessage *msg, gpointer user_data) { SoupSocket *socket = *(SoupSocket **)user_data; if (soup_socket_is_connected (socket)) { debug_printf (1, " socket is still connected\n"); errors++; } }
static void timeout_request_started (SoupServer *server, SoupMessage *msg, SoupClientContext *client, gpointer user_data) { SoupSocket *sock; GMainContext *context = soup_server_get_async_context (server); guint readable; sock = soup_client_context_get_socket (client); readable = g_signal_connect (sock, "readable", G_CALLBACK (timeout_socket), NULL); while (soup_socket_is_connected (sock)) g_main_context_iteration (context, TRUE); g_signal_handler_disconnect (sock, readable); g_signal_handlers_disconnect_by_func (server, timeout_request_started, NULL); }
SoupConnectionState soup_connection_get_state (SoupConnection *conn) { SoupConnectionPrivate *priv; g_return_val_if_fail (SOUP_IS_CONNECTION (conn), SOUP_CONNECTION_DISCONNECTED); priv = SOUP_CONNECTION_GET_PRIVATE (conn); if (priv->state == SOUP_CONNECTION_IDLE && (!soup_socket_is_connected (priv->socket) || soup_socket_is_readable (priv->socket))) soup_connection_set_state (conn, SOUP_CONNECTION_REMOTE_DISCONNECTED); if (priv->state == SOUP_CONNECTION_IDLE && priv->unused_timeout && priv->unused_timeout < time (NULL)) soup_connection_set_state (conn, SOUP_CONNECTION_REMOTE_DISCONNECTED); return priv->state; }
static void request_finished (SoupMessage *msg, SoupClientContext *client) { SoupServer *server = client->server; SoupSocket *sock = client->sock; g_signal_emit (server, msg->status_code == SOUP_STATUS_IO_ERROR ? signals[REQUEST_ABORTED] : signals[REQUEST_FINISHED], 0, msg, client); soup_client_context_cleanup (client); if (soup_socket_is_connected (sock) && soup_message_is_keepalive (msg)) { /* Start a new request */ start_request (server, client); } else { soup_socket_disconnect (sock); soup_client_context_unref (client); } g_object_unref (msg); g_object_unref (sock); }