[glib] Add send-data, a g_socket_client test case
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Subject: [glib] Add send-data, a g_socket_client test case
- Date: Tue, 19 May 2009 09:33:28 -0400 (EDT)
commit fdfdec36d0d0044513db25872132bd42d392f748
Author: Alexander Larsson <alexl redhat com>
Date: Tue May 19 13:44:11 2009 +0200
Add send-data, a g_socket_client test case
---
gio/tests/Makefile.am | 6 ++-
gio/tests/send-data.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 125 insertions(+), 1 deletions(-)
diff --git a/gio/tests/Makefile.am b/gio/tests/Makefile.am
index 7a20869..46b9fa6 100644
--- a/gio/tests/Makefile.am
+++ b/gio/tests/Makefile.am
@@ -30,7 +30,7 @@ TEST_PROGS += \
filter-streams \
simple-async-result
-SAMPLE_PROGS = resolver socket-server socket-client echo-server httpd
+SAMPLE_PROGS = resolver socket-server socket-client echo-server httpd send-data
if OS_UNIX
TEST_PROGS += live-g-file unix-streams desktop-app-info
@@ -102,4 +102,8 @@ httpd_SOURCES = httpd.c
httpd_LDADD = $(progs_ldadd) \
$(top_builddir)/gthread/libgthread-2.0.la
+send_data_SOURCES = send-data.c
+send_data_LDADD = $(progs_ldadd) \
+ $(top_builddir)/gthread/libgthread-2.0.la
+
DISTCLEAN_FILES = applications/mimeinfo.cache
diff --git a/gio/tests/send-data.c b/gio/tests/send-data.c
new file mode 100644
index 0000000..41eed5f
--- /dev/null
+++ b/gio/tests/send-data.c
@@ -0,0 +1,120 @@
+#include <gio/gio.h>
+#include <string.h>
+#include <stdio.h>
+
+int cancel_timeout = 0;
+static GOptionEntry cmd_entries[] = {
+ {"cancel", 'c', 0, G_OPTION_ARG_INT, &cancel_timeout,
+ "Cancel any op after the specified amount of seconds", NULL},
+ {NULL}
+};
+
+static gpointer
+cancel_thread (gpointer data)
+{
+ GCancellable *cancellable = data;
+
+ g_usleep (1000*1000*cancel_timeout);
+ g_print ("Cancelling\n");
+ g_cancellable_cancel (cancellable);
+ return NULL;
+}
+
+static char *
+socket_address_to_string (GSocketAddress *address)
+{
+ GInetAddress *inet_address;
+ char *str, *res;
+ int port;
+
+ inet_address = g_inet_socket_address_get_address (G_INET_SOCKET_ADDRESS (address));
+ str = g_inet_address_to_string (inet_address);
+ port = g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (address));
+ res = g_strdup_printf ("%s:%d", str, port);
+ g_free (str);
+ return res;
+}
+
+int
+main (int argc, char *argv[])
+{
+ GOptionContext *context;
+ GSocketClient *client;
+ GSocketConnection *connection;
+ GSocketAddress *address;
+ GCancellable *cancellable;
+ GOutputStream *out;
+ GError *error = NULL;
+ char buffer[1000];
+
+ g_type_init ();
+ g_thread_init (NULL);
+
+ context = g_option_context_new (" <hostname>[:port] - send data to tcp host");
+ 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;
+ }
+
+ if (argc != 2)
+ {
+ g_printerr ("%s: %s\n", argv[0], "Need to specify hostname");
+ return 1;
+ }
+
+ if (cancel_timeout)
+ {
+ cancellable = g_cancellable_new ();
+ g_thread_create (cancel_thread, cancellable, FALSE, NULL);
+ }
+ else
+ {
+ cancellable = NULL;
+ }
+
+ client = g_socket_client_new ();
+ connection = g_socket_client_connect_to_host (client,
+ argv[1],
+ 7777,
+ cancellable, &error);
+ if (connection == NULL)
+ {
+ g_printerr ("%s can't connect: %s\n", argv[0], error->message);
+ return 1;
+ }
+
+ address = g_socket_connection_get_remote_address (connection, &error);
+ if (!address)
+ {
+ g_printerr ("Error getting remote address: %s\n",
+ error->message);
+ return 1;
+ }
+ g_print ("Connected to address: %s\n",
+ socket_address_to_string (address));
+ g_object_unref (address);
+
+ out = g_io_stream_get_output_stream (G_IO_STREAM (connection));
+
+ while (fgets(buffer, sizeof (buffer), stdin) != NULL)
+ {
+ if (!g_output_stream_write_all (out, buffer, strlen (buffer),
+ NULL, cancellable, &error))
+ {
+ g_warning ("send error: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ }
+ }
+
+ g_print ("closing stream\n");
+ if (!g_io_stream_close (G_IO_STREAM (connection), cancellable, &error))
+ {
+ g_warning ("close error: %s\n", error->message);
+ return 1;
+ }
+
+ return 0;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]