X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=test%2Ftest-server.c;h=dd51b0213c5a8407cd424020d81901257bfafadf;hb=7cfe8e8d82c0b40be2e24b71ba0e6f6f5dc8ed9d;hp=d6d9e4676d8b31e9028c82611759b58d91a4937c;hpb=e9904ad0b8193f73258d2085864e03836b7f4b7a;p=cascardo%2Fgnio.git diff --git a/test/test-server.c b/test/test-server.c index d6d9e46..dd51b02 100644 --- a/test/test-server.c +++ b/test/test-server.c @@ -8,6 +8,20 @@ GMainLoop *loop; +void accept_callback (GSocket *socket, GAsyncResult *result, gpointer data); + +gboolean +accept_source (gpointer data) +{ + GSocket *socket = G_SOCKET (data); + + g_print ("in source\n"); + + g_socket_accept_async (socket, NULL, (GAsyncReadyCallback) accept_callback, NULL); + + return FALSE; +} + void accept_callback (GSocket *socket, GAsyncResult *result, gpointer data) { @@ -15,16 +29,27 @@ accept_callback (GSocket *socket, GAsyncResult *result, gpointer data) GSocketAddress *address; GError *error = NULL; + g_print ("in callback\n"); + new_socket = g_socket_accept_finish (socket, result, &error); - address = g_socket_get_peer_address (new_socket, NULL); + if (!new_socket) + g_error (error->message); + + address = g_socket_get_peer_address (new_socket, &error); + + if (!address) + g_error (error->message); g_printf ("got a new connection from %s:%d\n", g_inet_address_to_string (g_inet_socket_address_get_address (G_INET_SOCKET_ADDRESS (address))), g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (address))); + + g_idle_add (accept_source, (gpointer) socket); } int main (int argc, char *argv[]) { GSocket *socket; + GError *error = NULL; g_thread_init (NULL); @@ -32,15 +57,16 @@ int main (int argc, char *argv[]) loop = g_main_loop_new (NULL, FALSE); - socket = g_socket_new (AF_INET, SOCK_STREAM, 0); + socket = g_socket_new (G_SOCKET_DOMAIN_INET, G_SOCKET_TYPE_STREAM, NULL, NULL); - g_socket_bind (socket, G_SOCKET_ADDRESS (g_inet_socket_address_new (G_INET_ADDRESS (g_inet4_address_from_string ("127.0.0.1")), 31882)), NULL); + if (!g_socket_bind (socket, G_SOCKET_ADDRESS (g_inet_socket_address_new (G_INET_ADDRESS (g_inet4_address_from_string ("127.0.0.1")), 31882)), &error)) + g_error (error->message); g_socket_listen (socket, 10); g_printf ("listening on port 31882...\n"); - g_socket_accept_async (socket, NULL, (GAsyncReadyCallback) accept_callback, NULL); + g_idle_add (accept_source, (gpointer) socket); g_main_loop_run (loop);