1 /* #included into both socket-client.c and socket-server.c */
4 static const char *unix_socket_address_types
[] = {
14 socket_address_to_string (GSocketAddress
*address
)
18 if (G_IS_INET_SOCKET_ADDRESS (address
))
20 GInetAddress
*inet_address
;
24 inet_address
= g_inet_socket_address_get_address (G_INET_SOCKET_ADDRESS (address
));
25 str
= g_inet_address_to_string (inet_address
);
26 port
= g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (address
));
27 res
= g_strdup_printf ("%s:%d", str
, port
);
31 else if (G_IS_UNIX_SOCKET_ADDRESS (address
))
33 GUnixSocketAddress
*uaddr
= G_UNIX_SOCKET_ADDRESS (address
);
35 res
= g_strdup_printf ("%s:%s",
36 unix_socket_address_types
[g_unix_socket_address_get_address_type (uaddr
)],
37 g_unix_socket_address_get_path (uaddr
));
44 static GSocketAddress
*
45 socket_address_from_string (const char *name
)
50 for (i
= 0; i
< G_N_ELEMENTS (unix_socket_address_types
); i
++)
52 len
= strlen (unix_socket_address_types
[i
]);
53 if (!strncmp (name
, unix_socket_address_types
[i
], len
) &&
56 return g_unix_socket_address_new_with_type (name
+ len
+ 1, -1,
57 (GUnixSocketAddressType
)i
);
65 source_ready (GPollableInputStream
*stream
,
68 g_main_loop_quit (loop
);
73 ensure_socket_condition (GSocket
*socket
,
74 GIOCondition condition
,
75 GCancellable
*cancellable
)
82 source
= g_socket_create_source (socket
, condition
, cancellable
);
83 g_source_set_callback (source
,
84 (GSourceFunc
) source_ready
,
86 g_source_attach (source
, NULL
);
87 g_source_unref (source
);
88 g_main_loop_run (loop
);
92 ensure_connection_condition (GIOStream
*stream
,
93 GIOCondition condition
,
94 GCancellable
*cancellable
)
101 if (condition
& G_IO_IN
)
102 source
= g_pollable_input_stream_create_source (G_POLLABLE_INPUT_STREAM (g_io_stream_get_input_stream (stream
)), cancellable
);
104 source
= g_pollable_output_stream_create_source (G_POLLABLE_OUTPUT_STREAM (g_io_stream_get_output_stream (stream
)), cancellable
);
106 g_source_set_callback (source
,
107 (GSourceFunc
) source_ready
,
109 g_source_attach (source
, NULL
);
110 g_source_unref (source
);
111 g_main_loop_run (loop
);
115 cancel_thread (gpointer data
)
117 GCancellable
*cancellable
= data
;
119 g_usleep (1000*1000*cancel_timeout
);
120 g_print ("Cancelling\n");
121 g_cancellable_cancel (cancellable
);