static GObject * constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties) { GObject *server; SoupServerPrivate *priv; server = G_OBJECT_CLASS (soup_server_parent_class)->constructor ( type, n_construct_properties, construct_properties); if (!server) return NULL; priv = SOUP_SERVER_GET_PRIVATE (server); if (!priv->interface) { priv->interface = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV4, priv->port); } if (priv->ssl_cert_file && priv->ssl_key_file) { priv->ssl_creds = soup_ssl_get_server_credentials ( priv->ssl_cert_file, priv->ssl_key_file); if (!priv->ssl_creds) { g_object_unref (server); return NULL; } } priv->listen_sock = soup_socket_new (SOUP_SOCKET_LOCAL_ADDRESS, priv->interface, SOUP_SOCKET_SSL_CREDENTIALS, priv->ssl_creds, SOUP_SOCKET_ASYNC_CONTEXT, priv->async_context, NULL); if (!soup_socket_listen (priv->listen_sock)) { g_object_unref (server); return NULL; } /* Re-resolve the interface address, in particular in case * the passed-in address had SOUP_ADDRESS_ANY_PORT. */ g_object_unref (priv->interface); priv->interface = soup_socket_get_local_address (priv->listen_sock); g_object_ref (priv->interface); priv->port = soup_address_get_port (priv->interface); return server; }
static SoupServer * get_http_server (int port) { SoupAddress *if6; SoupServer *server; if6 = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV6, port); server = soup_server_new (SOUP_SERVER_INTERFACE, if6, SOUP_SERVER_PORT, port, NULL); g_object_unref (if6); if (server) return server; /* try again with just IPv4 */ server = soup_server_new (SOUP_SERVER_PORT, port, NULL); return server; }