Tworzę aplikacje z wykorzystaniem biblioteki libsoup, która będzie czymś w rodzaju serwera pośredniczącego (nie będę opisywał szczegółów - są nieistotne) Kod wygląda następująco:

w main:

...
SoupServer* server = soup_server_new (SOUP_SERVER_PORT,1234,NULL);
soup_server_add_handler (server, NULL,server_callback, NULL, NULL);
soup_server_run_async (server);

loop = g_main_loop_new (NULL, TRUE);
g_main_loop_run (loop);
g_main_loop_unref (loop);
...

prosta funkcja server_callback:


static void
server_callback (SoupServer        *server,
         SoupMessage       *msg, 
         const char        *path,
         GHashTable        *query,
         SoupClientContext *client,
         gpointer           user_data)
{
   printf("%s\n", msg->method);
}

Wszystko działa. Jednak w moim programie każde nowe połączenie musi być koniecznie obsługiwane przez nowo utworzony wątek. Po uruchomieniu programu i "zasypaniu" go zapytaniami, polecenie ps z parametrem -T nie pokazuje nowo utworzonych wątków dla programu. Domyślam się, że funkcja server_callback nie jest uruchamiana w nowym wątku ;) W dokumentacji libsoup nie doczytałem się niczego na ten temat, jest jedynie informacja, żeby w przypadku aplikacji wielowątkowych do uruchamiania serwera stosować funkcje soup_server_run zamiast soup_server_run_async. czy jest możliwość uruchomienia funkcji server_callback w nowym wątku, czy tylko poprzez utworzenia nowego wątku wewnątrz tej funkcji? Ogolnie muszę obsługiwać wielu klientow w tym samym czasie.