Datagram I/O

Datagram I/O — base class for datagram I/O classes

Synopsis




            GskPacketQueueClass;
            GskPacketQueue;
gboolean    gsk_packet_queue_bind           (GskPacketQueue *queue,
                                             GskSocketAddress *address,
                                             GError **error);
GskPacket*  gsk_packet_queue_read           (GskPacketQueue *queue,
                                             gboolean save_address,
                                             GError **error);
gboolean    gsk_packet_queue_write          (GskPacketQueue *queue,
                                             GskPacket *out,
                                             GError **error);
#define     gsk_packet_queue_get_allow_address(queue)
#define     gsk_packet_queue_get_allow_no_address(queue)
#define     gsk_packet_queue_get_misses_packets(queue)
#define     gsk_packet_queue_get_is_readable(queue)
#define     gsk_packet_queue_get_is_writable(queue)
#define     gsk_packet_queue_peek_bound_address(queue)
#define     gsk_packet_queue_mark_allow_address(queue)
#define     gsk_packet_queue_mark_allow_no_address(queue)
#define     gsk_packet_queue_mark_misses_packets(queue)
#define     gsk_packet_queue_mark_is_readable(queue)
#define     gsk_packet_queue_mark_is_writable(queue)
#define     gsk_packet_queue_clear_allow_address(queue)
#define     gsk_packet_queue_clear_allow_no_address(queue)
#define     gsk_packet_queue_clear_misses_packets(queue)
#define     gsk_packet_queue_clear_is_readable(queue)
#define     gsk_packet_queue_clear_is_writable(queue)
void        gsk_packet_queue_set_bound_addresss
                                            (GskPacketQueue *queue,
                                             GskSocketAddress *address);

Object Hierarchy


  GObject
   +----GskIO
         +----GskPacketQueue
               +----GskPacketQueueFd

Description

Datagram I/O means binary packets of data are the transmission unit. You can bind to an address in the right family, and read and write packets. Unless the packet_queue is bound, it is unlikely to ever be readable.

Details

GskPacketQueueClass

typedef struct {
  GskIOClass io_class;
  gboolean   (*bind)  (GskPacketQueue    *queue,
		       GskSocketAddress  *addr,
		       GError           **error);
  GskPacket *(*read)  (GskPacketQueue    *queue,
		       gboolean           save_address,
		       GError           **error);
  gboolean   (*write) (GskPacketQueue    *queue,
		       GskPacket         *out,
		       GError           **error);
} GskPacketQueueClass;

Base class for an object which can input and output packets.

GskIOClass io_class; parent class.
bind () bind to a particular socket-address.
read () read an incoming packet.
write () write an outgoing packet.

GskPacketQueue

typedef struct _GskPacketQueue GskPacketQueue;

Abstract instance which can read and write packets.


gsk_packet_queue_bind ()

gboolean    gsk_packet_queue_bind           (GskPacketQueue *queue,
                                             GskSocketAddress *address,
                                             GError **error);

Bind a packet queue to receive on a particular address.

queue : the packet queue to bind to a particular address.
address : the address to receive packets from.
error : optional error return value.
Returns : whether the bind call succeeded.

gsk_packet_queue_read ()

GskPacket*  gsk_packet_queue_read           (GskPacketQueue *queue,
                                             gboolean save_address,
                                             GError **error);

Read a packet from the queue, optionally tracking whence it came.

queue : to try to read a packet from
save_address : whether to create a remote address indication.
error : optional error return value.
Returns : a new packet, or NULL on error or if no packet was available.

gsk_packet_queue_write ()

gboolean    gsk_packet_queue_write          (GskPacketQueue *queue,
                                             GskPacket *out,
                                             GError **error);

Try and write a packet to the queue. If the packet has no address, then the packet-queue must allow_no_address. If the packet has an address, then the packet-queue must allow_address.

queue : to try to write a packet to
out : outgoing packet.
error : optional error return value.
Returns : whether the write succeeded.

gsk_packet_queue_get_allow_address()

#define gsk_packet_queue_get_allow_address(queue)       _gsk_packet_queue_get(queue,allow_address)

Determine whether packets with remote addresses may be written to this packet queue.

queue : the packet-queue to query.

gsk_packet_queue_get_allow_no_address()

#define gsk_packet_queue_get_allow_no_address(queue)    _gsk_packet_queue_get(queue,allow_no_address)

Determine whether packets without a remote address may be written to this packet queue.

queue : the packet-queue to query.

gsk_packet_queue_get_misses_packets()

#define gsk_packet_queue_get_misses_packets(queue)      _gsk_packet_queue_get(queue,misses_packets)

Determine whether the packet-queue drops incoming packets.

queue : the packet-queue to query.

gsk_packet_queue_get_is_readable()

#define gsk_packet_queue_get_is_readable(queue)         _gsk_packet_queue_get_io(queue,is_readable)

Determine whether the packet-queue may have incoming packets.

queue : the packet-queue to query.

gsk_packet_queue_get_is_writable()

#define gsk_packet_queue_get_is_writable(queue)         _gsk_packet_queue_get_io(queue,is_writable)

Determine whether the packet-queue may have packets written to it.

queue : the packet-queue to query.

gsk_packet_queue_peek_bound_address()

#define gsk_packet_queue_peek_bound_address(queue)      ((queue)->bound_address)

Get the address this queue is bound to, or NULL.

queue : the packet-queue to query.

gsk_packet_queue_mark_allow_address()

#define gsk_packet_queue_mark_allow_address(queue)      _gsk_packet_queue_mark(queue,allow_address)

Indicate that this packet-queue can accept outgoing packets which have an address.

This should only be used by derived classes.

queue : the packet-queue to affect.

gsk_packet_queue_mark_allow_no_address()

#define gsk_packet_queue_mark_allow_no_address(queue)   _gsk_packet_queue_mark(queue,allow_no_address)

Indicate that this packet-queue can accept outgoing packets which have an no address.

This should only be used by derived classes.

queue : the packet-queue to affect.

gsk_packet_queue_mark_misses_packets()

#define gsk_packet_queue_mark_misses_packets(queue)     _gsk_packet_queue_mark(queue,misses_packets)

Indicate that this packet-queue may drop incoming packets.

This should only be used by derived classes.

queue : the packet-queue to affect.

gsk_packet_queue_mark_is_readable()

#define gsk_packet_queue_mark_is_readable(queue)        _gsk_packet_queue_mark_io(queue,is_readable)

Indicate that this packet-queue may be read from.

This should only be used by derived classes.

queue : the packet-queue to affect.

gsk_packet_queue_mark_is_writable()

#define gsk_packet_queue_mark_is_writable(queue)        _gsk_packet_queue_mark_io(queue,is_writable)

Indicate that this packet-queue may be written to.

This should only be used by derived classes.

queue : the packet-queue to affect.

gsk_packet_queue_clear_allow_address()

#define gsk_packet_queue_clear_allow_address(queue)     _gsk_packet_queue_clear(queue,allow_address)

Indicate that this packet-queue cannot accept outgoing packets which have an address.

This should only be used by derived classes.

queue : the packet-queue to affect.

gsk_packet_queue_clear_allow_no_address()

#define gsk_packet_queue_clear_allow_no_address(queue)  _gsk_packet_queue_clear(queue,allow_no_address)

Indicate that this packet-queue cannot accept outgoing packets which have no address.

This should only be used by derived classes.

queue : the packet-queue to affect.

gsk_packet_queue_clear_misses_packets()

#define gsk_packet_queue_clear_misses_packets(queue)    _gsk_packet_queue_clear(queue,misses_packets)

Indicate that this packet-queue will not drop incoming packets.

This should only be used by derived classes.

queue : the packet-queue to affect.

gsk_packet_queue_clear_is_readable()

#define gsk_packet_queue_clear_is_readable(queue)       _gsk_packet_queue_clear_io(queue,is_readable)

Indicate that this packet-queue may not be read from.

This should only be used by derived classes.

queue : the packet-queue to affect.

gsk_packet_queue_clear_is_writable()

#define gsk_packet_queue_clear_is_writable(queue)       _gsk_packet_queue_clear_io(queue,is_writable)

Indicate that this packet-queue may not be written to.

This should only be used by derived classes.

queue : the packet-queue to affect.

gsk_packet_queue_set_bound_addresss ()

void        gsk_packet_queue_set_bound_addresss
                                            (GskPacketQueue *queue,
                                             GskSocketAddress *address);

Set the bound_address member of the packet-queue safely.

This should only be called by implementations which automatically bind to certain addresses.

queue : queue to mark
address : address to which the queue has been bound.

See Also

GskIO