#include #include #define MESSAGE "Welcome to the echo service!\n" int port = 7777; static GOptionEntry cmd_entries[] = { {"port", 'p', 0, G_OPTION_ARG_INT, &port, "Local port to bind to", NULL}, {NULL} }; static gboolean handler (GThreadedSocketService *service, GSocketConnection *connection, GSocketListener *listener, gpointer user_data) { GOutputStream *out; GInputStream *in; char buffer[1024]; gssize size; out = g_io_stream_get_output_stream (G_IO_STREAM (connection)); in = g_io_stream_get_input_stream (G_IO_STREAM (connection)); g_output_stream_write_all (out, MESSAGE, strlen (MESSAGE), NULL, NULL, NULL); while (0 < (size = g_input_stream_read (in, buffer, sizeof buffer, NULL, NULL))) g_output_stream_write (out, buffer, size, NULL, NULL); return TRUE; } int main (int argc, char *argv[]) { GSocketService *service; GOptionContext *context; GError *error = NULL; context = g_option_context_new (" - Test GSocket server stuff"); g_option_context_add_main_entries (context, cmd_entries, NULL); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_printerr ("%s: %s\n", argv[0], error->message); return 1; } service = g_threaded_socket_service_new (10); if (!g_socket_listener_add_inet_port (G_SOCKET_LISTENER (service), port, NULL, &error)) { g_printerr ("%s: %s\n", argv[0], error->message); return 1; } g_print ("Echo service listening on port %d\n", port); g_signal_connect (service, "run", G_CALLBACK (handler), NULL); g_main_loop_run (g_main_loop_new (NULL, FALSE)); g_assert_not_reached (); }