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.