Blame gio/tests/echo-server.c

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