Interface
GioDatagramBased
since: 2.48
Description [src]
interface Gio.DatagramBased : GObject.Object
Interface for socket-like objects with datagram semantics.
A GDatagramBased is a networking interface for representing datagram-based
communications. It is a more or less direct mapping of the core parts of the
BSD socket API in a portable GObject interface. It is implemented by
GSocket, which wraps the UNIX socket API on UNIX and winsock2 on Windows.
GDatagramBased is entirely platform independent, and is intended to be used
alongside higher-level networking APIs such as GIOStream.
It uses vectored scatter/gather I/O by default, allowing for many messages
to be sent or received in a single call. Where possible, implementations of
the interface should take advantage of vectored I/O to minimise processing
or system calls. For example, GSocket uses recvmmsg() and sendmmsg()
where possible. Callers should take advantage of scatter/gather I/O (the use of
multiple buffers per message) to avoid unnecessary copying of data to
assemble or disassemble a message.
Each GDatagramBased operation has a timeout parameter which may be negative
for blocking behaviour, zero for non-blocking behaviour, or positive for
timeout behaviour. A blocking operation blocks until finished or there is an
error. A non-blocking operation will return immediately with a
G_IO_ERROR_WOULD_BLOCK error if it cannot make progress. A timeout operation
will block until the operation is complete or the timeout expires; if the
timeout expires it will return what progress it made, or
G_IO_ERROR_TIMED_OUT if no progress was made. To know when a call would
successfully run you can call g_datagram_based_condition_check() or
g_datagram_based_condition_wait(). You can also use
g_datagram_based_create_source() and attach it to a GMainContext
to get callbacks when I/O is possible.
When running a non-blocking operation applications should always be able to
handle getting a G_IO_ERROR_WOULD_BLOCK error even when some other function
said that I/O was possible. This can easily happen in case of a race
condition in the application, but it can also happen for other reasons. For
instance, on Windows a socket is always seen as writable until a write returns G_IO_ERROR_WOULD_BLOCK.
As with GSocket, GDatagramBaseds can be either connection oriented (for
example, SCTP) or connectionless (for example, UDP). GDatagramBaseds must be
datagram-based, not stream-based. The interface does not cover connection
establishment — use methods on the underlying type to establish a connection
before sending and receiving data through the GDatagramBased API. For
connectionless socket types the target/source address is specified or
received in each I/O operation.
Like most other APIs in GLib, GDatagramBased is not inherently thread safe.
To use a GDatagramBased concurrently from multiple threads, you must
implement your own locking.
Available since: 2.48
Prerequisite
In order to implement DatagramBased, your type must inherit fromGObject.
Instance methods
g_datagram_based_condition_check
Checks on the readiness of datagram_based to perform operations. The
operations specified in condition are checked for and masked against the
currently-satisfied conditions on datagram_based. The result is returned.
since: 2.48
g_datagram_based_condition_wait
Waits for up to timeout microseconds for condition to become true on
datagram_based. If the condition is met, TRUE is returned.
since: 2.48
g_datagram_based_create_source
Creates a GSource that can be attached to a GMainContext to monitor for
the availability of the specified condition on the GDatagramBased. The
GSource keeps a reference to the datagram_based.
since: 2.48
g_datagram_based_receive_messages
Receive one or more data messages from datagram_based in one go.
since: 2.48
g_datagram_based_send_messages
Send one or more data messages from datagram_based in one go.
since: 2.48
Interface structure
struct GioDatagramBasedInterface {
GTypeInterface g_iface;
gint (* receive_messages) (
GDatagramBased* datagram_based,
GInputMessage* messages,
guint num_messages,
gint flags,
gint64 timeout,
GCancellable* cancellable,
GError** error
);
gint (* send_messages) (
GDatagramBased* datagram_based,
GOutputMessage* messages,
guint num_messages,
gint flags,
gint64 timeout,
GCancellable* cancellable,
GError** error
);
GSource* (* create_source) (
GDatagramBased* datagram_based,
GIOCondition condition,
GCancellable* cancellable
);
GIOCondition (* condition_check) (
GDatagramBased* datagram_based,
GIOCondition condition
);
gboolean (* condition_wait) (
GDatagramBased* datagram_based,
GIOCondition condition,
gint64 timeout,
GCancellable* cancellable,
GError** error
);
}
Provides an interface for socket-like objects which have datagram semantics, following the Berkeley sockets API. The interface methods are thin wrappers around the corresponding virtual methods, and no pre-processing of inputs is implemented — so implementations of this API must handle all functionality documented in the interface methods.
Interface members
g_iface |
|
The parent interface. |
|
receive_messages |
|
Virtual method for g_datagram_based_receive_messages(). |
|
send_messages |
|
Virtual method for g_datagram_based_send_messages(). |
|
create_source |
|
Virtual method for g_datagram_based_create_source(). |
|
condition_check |
|
Virtual method for g_datagram_based_condition_check(). |
|
condition_wait |
|
Virtual method for g_datagram_based_condition_wait(). |
Virtual methods
Gio.DatagramBased.condition_check
Checks on the readiness of datagram_based to perform operations. The
operations specified in condition are checked for and masked against the
currently-satisfied conditions on datagram_based. The result is returned.
since: 2.48
Gio.DatagramBased.condition_wait
Waits for up to timeout microseconds for condition to become true on
datagram_based. If the condition is met, TRUE is returned.
since: 2.48
Gio.DatagramBased.create_source
Creates a GSource that can be attached to a GMainContext to monitor for
the availability of the specified condition on the GDatagramBased. The
GSource keeps a reference to the datagram_based.
since: 2.48
Gio.DatagramBased.receive_messages
Receive one or more data messages from datagram_based in one go.
since: 2.48
Gio.DatagramBased.send_messages
Send one or more data messages from datagram_based in one go.
since: 2.48