1 /* 2 * Copyright © 2008 Christian Kellner, Samuel Cormier-Iijima 3 * Copyright © 2009 Codethink Limited 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General 16 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>. 17 * 18 * Authors: Christian Kellner <gicmo@gnome.org> 19 * Samuel Cormier-Iijima <sciyoshi@gmail.com> 20 * Ryan Lortie <desrt@desrt.ca> 21 */ 22 23 #ifndef __G_SOCKET_H__ 24 #define __G_SOCKET_H__ 25 26 #if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) 27 #error "Only <gio/gio.h> can be included directly." 28 #endif 29 30 #include <gio/giotypes.h> 31 32 G_BEGIN_DECLS 33 34 #define G_TYPE_SOCKET (g_socket_get_type ()) 35 #define G_SOCKET(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ 36 G_TYPE_SOCKET, GSocket)) 37 #define G_SOCKET_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ 38 G_TYPE_SOCKET, GSocketClass)) 39 #define G_IS_SOCKET(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ 40 G_TYPE_SOCKET)) 41 #define G_IS_SOCKET_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ 42 G_TYPE_SOCKET)) 43 #define G_SOCKET_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ 44 G_TYPE_SOCKET, GSocketClass)) 45 46 typedef struct _GSocketPrivate GSocketPrivate; 47 typedef struct _GSocketClass GSocketClass; 48 49 struct _GSocketClass 50 { 51 GObjectClass parent_class; 52 53 /*< private >*/ 54 55 /* Padding for future expansion */ 56 void (*_g_reserved1) (void); 57 void (*_g_reserved2) (void); 58 void (*_g_reserved3) (void); 59 void (*_g_reserved4) (void); 60 void (*_g_reserved5) (void); 61 void (*_g_reserved6) (void); 62 void (*_g_reserved7) (void); 63 void (*_g_reserved8) (void); 64 void (*_g_reserved9) (void); 65 void (*_g_reserved10) (void); 66 }; 67 68 struct _GSocket 69 { 70 GObject parent_instance; 71 GSocketPrivate *priv; 72 }; 73 74 GLIB_AVAILABLE_IN_ALL 75 GType g_socket_get_type (void) G_GNUC_CONST; 76 GLIB_AVAILABLE_IN_ALL 77 GSocket * g_socket_new (GSocketFamily family, 78 GSocketType type, 79 GSocketProtocol protocol, 80 GError **error); 81 GLIB_AVAILABLE_IN_ALL 82 GSocket * g_socket_new_from_fd (gint fd, 83 GError **error); 84 GLIB_AVAILABLE_IN_ALL 85 int g_socket_get_fd (GSocket *socket); 86 GLIB_AVAILABLE_IN_ALL 87 GSocketFamily g_socket_get_family (GSocket *socket); 88 GLIB_AVAILABLE_IN_ALL 89 GSocketType g_socket_get_socket_type (GSocket *socket); 90 GLIB_AVAILABLE_IN_ALL 91 GSocketProtocol g_socket_get_protocol (GSocket *socket); 92 GLIB_AVAILABLE_IN_ALL 93 GSocketAddress * g_socket_get_local_address (GSocket *socket, 94 GError **error); 95 GLIB_AVAILABLE_IN_ALL 96 GSocketAddress * g_socket_get_remote_address (GSocket *socket, 97 GError **error); 98 GLIB_AVAILABLE_IN_ALL 99 void g_socket_set_blocking (GSocket *socket, 100 gboolean blocking); 101 GLIB_AVAILABLE_IN_ALL 102 gboolean g_socket_get_blocking (GSocket *socket); 103 GLIB_AVAILABLE_IN_ALL 104 void g_socket_set_keepalive (GSocket *socket, 105 gboolean keepalive); 106 GLIB_AVAILABLE_IN_ALL 107 gboolean g_socket_get_keepalive (GSocket *socket); 108 GLIB_AVAILABLE_IN_ALL 109 gint g_socket_get_listen_backlog (GSocket *socket); 110 GLIB_AVAILABLE_IN_ALL 111 void g_socket_set_listen_backlog (GSocket *socket, 112 gint backlog); 113 GLIB_AVAILABLE_IN_ALL 114 guint g_socket_get_timeout (GSocket *socket); 115 GLIB_AVAILABLE_IN_ALL 116 void g_socket_set_timeout (GSocket *socket, 117 guint timeout); 118 119 GLIB_AVAILABLE_IN_2_32 120 guint g_socket_get_ttl (GSocket *socket); 121 GLIB_AVAILABLE_IN_2_32 122 void g_socket_set_ttl (GSocket *socket, 123 guint ttl); 124 125 GLIB_AVAILABLE_IN_2_32 126 gboolean g_socket_get_broadcast (GSocket *socket); 127 GLIB_AVAILABLE_IN_2_32 128 void g_socket_set_broadcast (GSocket *socket, 129 gboolean broadcast); 130 131 GLIB_AVAILABLE_IN_2_32 132 gboolean g_socket_get_multicast_loopback (GSocket *socket); 133 GLIB_AVAILABLE_IN_2_32 134 void g_socket_set_multicast_loopback (GSocket *socket, 135 gboolean loopback); 136 GLIB_AVAILABLE_IN_2_32 137 guint g_socket_get_multicast_ttl (GSocket *socket); 138 GLIB_AVAILABLE_IN_2_32 139 void g_socket_set_multicast_ttl (GSocket *socket, 140 guint ttl); 141 GLIB_AVAILABLE_IN_ALL 142 gboolean g_socket_is_connected (GSocket *socket); 143 GLIB_AVAILABLE_IN_ALL 144 gboolean g_socket_bind (GSocket *socket, 145 GSocketAddress *address, 146 gboolean allow_reuse, 147 GError **error); 148 GLIB_AVAILABLE_IN_2_32 149 gboolean g_socket_join_multicast_group (GSocket *socket, 150 GInetAddress *group, 151 gboolean source_specific, 152 const gchar *iface, 153 GError **error); 154 GLIB_AVAILABLE_IN_2_32 155 gboolean g_socket_leave_multicast_group (GSocket *socket, 156 GInetAddress *group, 157 gboolean source_specific, 158 const gchar *iface, 159 GError **error); 160 GLIB_AVAILABLE_IN_2_56 161 gboolean g_socket_join_multicast_group_ssm (GSocket *socket, 162 GInetAddress *group, 163 GInetAddress *source_specific, 164 const gchar *iface, 165 GError **error); 166 GLIB_AVAILABLE_IN_2_56 167 gboolean g_socket_leave_multicast_group_ssm (GSocket *socket, 168 GInetAddress *group, 169 GInetAddress *source_specific, 170 const gchar *iface, 171 GError **error); 172 GLIB_AVAILABLE_IN_ALL 173 gboolean g_socket_connect (GSocket *socket, 174 GSocketAddress *address, 175 GCancellable *cancellable, 176 GError **error); 177 GLIB_AVAILABLE_IN_ALL 178 gboolean g_socket_check_connect_result (GSocket *socket, 179 GError **error); 180 181 GLIB_AVAILABLE_IN_ALL 182 gssize g_socket_get_available_bytes (GSocket *socket); 183 184 GLIB_AVAILABLE_IN_ALL 185 GIOCondition g_socket_condition_check (GSocket *socket, 186 GIOCondition condition); 187 GLIB_AVAILABLE_IN_ALL 188 gboolean g_socket_condition_wait (GSocket *socket, 189 GIOCondition condition, 190 GCancellable *cancellable, 191 GError **error); 192 GLIB_AVAILABLE_IN_2_32 193 gboolean g_socket_condition_timed_wait (GSocket *socket, 194 GIOCondition condition, 195 gint64 timeout_us, 196 GCancellable *cancellable, 197 GError **error); 198 GLIB_AVAILABLE_IN_ALL 199 GSocket * g_socket_accept (GSocket *socket, 200 GCancellable *cancellable, 201 GError **error); 202 GLIB_AVAILABLE_IN_ALL 203 gboolean g_socket_listen (GSocket *socket, 204 GError **error); 205 GLIB_AVAILABLE_IN_ALL 206 gssize g_socket_receive (GSocket *socket, 207 gchar *buffer, 208 gsize size, 209 GCancellable *cancellable, 210 GError **error); 211 GLIB_AVAILABLE_IN_ALL 212 gssize g_socket_receive_from (GSocket *socket, 213 GSocketAddress **address, 214 gchar *buffer, 215 gsize size, 216 GCancellable *cancellable, 217 GError **error); 218 GLIB_AVAILABLE_IN_ALL 219 gssize g_socket_send (GSocket *socket, 220 const gchar *buffer, 221 gsize size, 222 GCancellable *cancellable, 223 GError **error); 224 GLIB_AVAILABLE_IN_ALL 225 gssize g_socket_send_to (GSocket *socket, 226 GSocketAddress *address, 227 const gchar *buffer, 228 gsize size, 229 GCancellable *cancellable, 230 GError **error); 231 GLIB_AVAILABLE_IN_ALL 232 gssize g_socket_receive_message (GSocket *socket, 233 GSocketAddress **address, 234 GInputVector *vectors, 235 gint num_vectors, 236 GSocketControlMessage ***messages, 237 gint *num_messages, 238 gint *flags, 239 GCancellable *cancellable, 240 GError **error); 241 GLIB_AVAILABLE_IN_ALL 242 gssize g_socket_send_message (GSocket *socket, 243 GSocketAddress *address, 244 GOutputVector *vectors, 245 gint num_vectors, 246 GSocketControlMessage **messages, 247 gint num_messages, 248 gint flags, 249 GCancellable *cancellable, 250 GError **error); 251 252 GLIB_AVAILABLE_IN_2_48 253 gint g_socket_receive_messages (GSocket *socket, 254 GInputMessage *messages, 255 guint num_messages, 256 gint flags, 257 GCancellable *cancellable, 258 GError **error); 259 GLIB_AVAILABLE_IN_2_44 260 gint g_socket_send_messages (GSocket *socket, 261 GOutputMessage *messages, 262 guint num_messages, 263 gint flags, 264 GCancellable *cancellable, 265 GError **error); 266 267 GLIB_AVAILABLE_IN_ALL 268 gboolean g_socket_close (GSocket *socket, 269 GError **error); 270 GLIB_AVAILABLE_IN_ALL 271 gboolean g_socket_shutdown (GSocket *socket, 272 gboolean shutdown_read, 273 gboolean shutdown_write, 274 GError **error); 275 GLIB_AVAILABLE_IN_ALL 276 gboolean g_socket_is_closed (GSocket *socket); 277 GLIB_AVAILABLE_IN_ALL 278 GSource * g_socket_create_source (GSocket *socket, 279 GIOCondition condition, 280 GCancellable *cancellable); 281 GLIB_AVAILABLE_IN_ALL 282 gboolean g_socket_speaks_ipv4 (GSocket *socket); 283 GLIB_AVAILABLE_IN_ALL 284 GCredentials *g_socket_get_credentials (GSocket *socket, 285 GError **error); 286 287 GLIB_AVAILABLE_IN_ALL 288 gssize g_socket_receive_with_blocking (GSocket *socket, 289 gchar *buffer, 290 gsize size, 291 gboolean blocking, 292 GCancellable *cancellable, 293 GError **error); 294 GLIB_AVAILABLE_IN_ALL 295 gssize g_socket_send_with_blocking (GSocket *socket, 296 const gchar *buffer, 297 gsize size, 298 gboolean blocking, 299 GCancellable *cancellable, 300 GError **error); 301 GLIB_AVAILABLE_IN_2_60 302 GPollableReturn g_socket_send_message_with_timeout (GSocket *socket, 303 GSocketAddress *address, 304 const GOutputVector *vectors, 305 gint num_vectors, 306 GSocketControlMessage **messages, 307 gint num_messages, 308 gint flags, 309 gint64 timeout_us, 310 gsize *bytes_written, 311 GCancellable *cancellable, 312 GError **error); 313 GLIB_AVAILABLE_IN_2_36 314 gboolean g_socket_get_option (GSocket *socket, 315 gint level, 316 gint optname, 317 gint *value, 318 GError **error); 319 GLIB_AVAILABLE_IN_2_36 320 gboolean g_socket_set_option (GSocket *socket, 321 gint level, 322 gint optname, 323 gint value, 324 GError **error); 325 326 G_END_DECLS 327 328 #endif /* __G_SOCKET_H__ */ 329