X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=test%2Ftest-server.c;h=0c2a787da42cfe0d091c1aaec9a17266c0c70fd3;hb=c69e0ebc3a9e13b4af030a19b117175f881f2b3c;hp=dd51b0213c5a8407cd424020d81901257bfafadf;hpb=7cfe8e8d82c0b40be2e24b71ba0e6f6f5dc8ed9d;p=cascardo%2Fgnio.git diff --git a/test/test-server.c b/test/test-server.c index dd51b02..0c2a787 100644 --- a/test/test-server.c +++ b/test/test-server.c @@ -3,13 +3,14 @@ #include #include #include -#include #include +#include GMainLoop *loop; void accept_callback (GSocket *socket, GAsyncResult *result, gpointer data); +/* gboolean accept_source (gpointer data) { @@ -36,19 +37,21 @@ accept_callback (GSocket *socket, GAsyncResult *result, gpointer data) if (!new_socket) g_error (error->message); - address = g_socket_get_peer_address (new_socket, &error); + address = g_socket_get_remote_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_print ("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; + GSocket *socket, *new_socket; + GSocketAddress *address; GError *error = NULL; g_thread_init (NULL); @@ -57,18 +60,68 @@ int main (int argc, char *argv[]) loop = g_main_loop_new (NULL, FALSE); - socket = g_socket_new (G_SOCKET_DOMAIN_INET, G_SOCKET_TYPE_STREAM, NULL, NULL); + socket = g_socket_new (G_SOCKET_DOMAIN_INET, G_SOCKET_TYPE_STREAM, NULL); + + g_socket_set_reuse_address (socket, TRUE); - 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)) + 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); + return 0; + } - g_socket_listen (socket, 10); + if (!g_socket_listen (socket, &error)) { + g_error (error->message); + return 0; + } - g_printf ("listening on port 31882...\n"); + g_print ("listening on port 31882...\n"); - g_idle_add (accept_source, (gpointer) socket); + new_socket = g_socket_accept (socket, &error); + + if (!new_socket) { + g_error (error->message); + return 0; + } + + address = g_socket_get_remote_address (new_socket, &error); + + if (!address) { + g_error (error->message); + return 0; + } + + g_print ("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))); + + while (TRUE) { + gchar buffer[128] = { }; + gssize size; + + if ((size = g_socket_receive (new_socket, buffer, 128, &error)) < 0) { + g_error (error->message); + return 0; + } + + if (size == 0) + break; + + g_print ("received %d bytes of data: %s\n", size, buffer); + + if ((size = g_socket_send (new_socket, buffer, size, &error)) < 0) { + g_error (error->message); + return 0; + } + + if (size == 0) + break; + } + + g_print ("connection closed\n"); + + g_object_unref (G_OBJECT (new_socket)); + + g_socket_close (socket); - g_main_loop_run (loop); + g_object_unref (G_OBJECT (socket)); return 0; }