mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-02 07:23:41 +02:00
Add test apps for highlevel socket classes
echo-server - simple echo server httpd - simple http server
This commit is contained in:
73
gio/tests/echo-server.c
Normal file
73
gio/tests/echo-server.c
Normal file
@@ -0,0 +1,73 @@
|
||||
#include <gio/gio.h>
|
||||
#include <string.h>
|
||||
|
||||
#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;
|
||||
|
||||
g_type_init ();
|
||||
g_thread_init (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 ();
|
||||
|
||||
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 ();
|
||||
}
|
Reference in New Issue
Block a user