glib/gio/gsocket.h
Alexander Larsson f662e7e86b Store protocol by id, add lookup function for name
We want to use the protocol id for lookup in the GSocketConnection
code, so we expose it. We also make GSocket store the protocol
as an int for less memory use and to allow platform specific protocols
to be specified.

Also added g_socket_protocol_id_lookup_by_name() to allow the higher
level code to specify the name by string, and g_socket_get_protocol_name()
to get it.
2009-05-15 09:10:23 +02:00

175 lines
8.6 KiB
C

/*
* Copyright © 2008 Christian Kellner, Samuel Cormier-Iijima
* Copyright © 2009 Codethink Limited
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
* Authors: Christian Kellner <gicmo@gnome.org>
* Samuel Cormier-Iijima <sciyoshi@gmail.com>
* Ryan Lortie <desrt@desrt.ca>
*/
#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
#error "Only <gio/gio.h> can be included directly."
#endif
#ifndef __G_SOCKET_H__
#define __G_SOCKET_H__
#include <gio/giotypes.h>
G_BEGIN_DECLS
#define G_TYPE_SOCKET (g_socket_get_type ())
#define G_SOCKET(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \
G_TYPE_SOCKET, GSocket))
#define G_SOCKET_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \
G_TYPE_SOCKET, GSocketClass))
#define G_IS_SOCKET(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \
G_TYPE_SOCKET))
#define G_IS_SOCKET_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \
G_TYPE_SOCKET))
#define G_SOCKET_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \
G_TYPE_SOCKET, GSocketClass))
typedef struct _GSocketPrivate GSocketPrivate;
typedef struct _GSocketClass GSocketClass;
struct _GSocketClass
{
GObjectClass parent_class;
/*< private >*/
/* Padding for future expansion */
void (*_g_reserved1) (void);
void (*_g_reserved2) (void);
void (*_g_reserved3) (void);
void (*_g_reserved4) (void);
void (*_g_reserved5) (void);
void (*_g_reserved6) (void);
void (*_g_reserved7) (void);
void (*_g_reserved8) (void);
void (*_g_reserved9) (void);
void (*_g_reserved10) (void);
};
struct _GSocket
{
GObject parent_instance;
GSocketPrivate *priv;
};
GType g_socket_get_type (void) G_GNUC_CONST;
GSocket * g_socket_new (GSocketFamily family,
GSocketType type,
gint protocol_id,
GError **error);
GSocket * g_socket_new_from_fd (gint fd,
GError **error);
int g_socket_get_fd (GSocket *socket);
GSocketFamily g_socket_get_family (GSocket *socket);
GSocketType g_socket_get_socket_type (GSocket *socket);
gint g_socket_get_protocol_id (GSocket *socket);
char * g_socket_get_protocol_name (GSocket *socket);
GSocketAddress * g_socket_get_local_address (GSocket *socket,
GError **error);
GSocketAddress * g_socket_get_remote_address (GSocket *socket,
GError **error);
void g_socket_set_blocking (GSocket *socket,
gboolean blocking);
gboolean g_socket_get_blocking (GSocket *socket);
void g_socket_set_reuse_address (GSocket *socket,
gboolean reuse);
gboolean g_socket_get_reuse_address (GSocket *socket);
void g_socket_set_keepalive (GSocket *socket,
gboolean keepalive);
gboolean g_socket_get_keepalive (GSocket *socket);
gint g_socket_get_listen_backlog (GSocket *socket);
void g_socket_set_listen_backlog (GSocket *socket,
gint backlog);
gboolean g_socket_is_connected (GSocket *socket);
gboolean g_socket_bind (GSocket *socket,
GSocketAddress *address,
gboolean allow_reuse,
GError **error);
gboolean g_socket_connect (GSocket *socket,
GSocketAddress *address,
GError **error);
gboolean g_socket_check_pending_error (GSocket *socket,
GError **error);
GIOCondition g_socket_condition_check (GSocket *socket,
GIOCondition condition);
gboolean g_socket_condition_wait (GSocket *socket,
GIOCondition condition,
GCancellable *cancellable,
GError **error);
GSocket * g_socket_accept (GSocket *socket,
GError **error);
gboolean g_socket_listen (GSocket *socket,
GError **error);
gssize g_socket_receive (GSocket *socket,
gchar *buffer,
gsize size,
GError **error);
gssize g_socket_receive_from (GSocket *socket,
GSocketAddress **address,
gchar *buffer,
gsize size,
GError **error);
gssize g_socket_send (GSocket *socket,
const gchar *buffer,
gsize size,
GError **error);
gssize g_socket_send_to (GSocket *socket,
GSocketAddress *address,
const gchar *buffer,
gsize size,
GError **error);
GSocketControlMessage *g_socket_receive_control_message (GSocket *socket,
GError **error);
gboolean g_socket_send_control_message (GSocket *socket,
GSocketControlMessage *message,
GError **error);
gssize g_socket_receive_message (GSocket *socket,
GSocketAddress **address,
GInputVector *vectors,
gint num_vectors,
GSocketControlMessage ***messages,
gint *num_messages,
gint *flags,
GError **error);
gssize g_socket_send_message (GSocket *socket,
GSocketAddress *address,
GOutputVector *vectors,
gint num_vectors,
GSocketControlMessage **messages,
gint num_messages,
gint flags,
GError **error);
gboolean g_socket_close (GSocket *socket,
GError **error);
gboolean g_socket_is_closed (GSocket *socket);
GSource * g_socket_create_source (GSocket *socket,
GIOCondition condition,
GCancellable *cancellable);
gint g_socket_protocol_id_lookup_by_name (const char *protocol_name);
G_END_DECLS
#endif /* __G_SOCKET_H__ */