Efl.Net.Socket.Simple (class)

Description

A wrapper socket offering an easy to use, buffered I/O.

The simple socket encapsulates an actual Efl.Net.Socket and uses it with an Efl.Io.Buffered_Stream, which creates an input Efl.Io.Queue and an output Efl.Io.Queue. These are linked using a receiver and a sender Efl.Io.Copier.

The idea is that unlike the traditional Efl.Net.Socket which attempts to write directly to socket and thus may take less data than requested, this one will keep the pending data in its own buffer, feeding to the actual socket when Efl.Io.Writer.can_write. This makes its operation much simpler as Efl.Io.Writer.write will always take the full data -- allows "write and forget", if unlimited (see Efl.Io.Buffered_Stream.max_queue_size_output).

Reading is also much simpler since received data is kept in an Efl.Io.Queue, thus its size can be queried with Efl.Io.Buffered_Stream.pending_read and read with Efl.Io.Reader.read or peeked with Efl.Io.Buffered_Stream.slice, then discarded with Efl.Io.Buffered_Stream.discard or Efl.Io.Buffered_Stream.clear.

When waiting for a complete message, you can just peek at its contents: if incomplete do nothing, if complete then use either Efl.Io.Reader.read to get a copy or manipulate a read-only reference from Efl.Io.Buffered_Stream.slice and then Efl.Io.Buffered_Stream.discard

The actual socket is set with the constructor method Efl.Io.Buffered_Stream.inner_io.set and can be retrieved with Efl.Io.Buffered_Stream.inner_io.get, which should be used with care.

Since 1.19

Inheritance

Efl.Io.Buffered_Stream (class)Efl.Loop.Consumer (class)Efl.Object (class)

Full hierarchy

Members

address_local (get, set) protected set [Overridden from Efl.Net.Socket]

The local address, similar to getsockname().
const char *efl_net_socket_address_local_get(const Eo *obj);
void efl_net_socket_address_local_set(Eo *obj, const char *address);


address_remote (get, set) protected set [Overridden from Efl.Net.Socket]

The remote address, similar to getpeername().
const char *efl_net_socket_address_remote_get(const Eo *obj);
void efl_net_socket_address_remote_set(Eo *obj, const char *address);


inner_io (get, set) [Overridden from Efl.Io.Buffered_Stream]

The inner I/O this wrapper operates on.
Efl_Object *efl_io_buffered_stream_inner_io_get(const Eo *obj);
void efl_io_buffered_stream_inner_io_set(Eo *obj, Efl_Object *io);


Inherited

Efl.Io.Buffered_Stream
protected set can_read (get, set) If true will notify Efl.Io.Reader.read can be called without blocking or failing.
protected set can_write (get, set) If true will notify Efl.Io.Writer.write can be called without blocking or failing.
clear Clears the incoming queue. Same as reading all data.
close Closes the Input/Output object.
close_on_destructor (get, set) If true will automatically close() on object destructor.
close_on_exec (get, set) If true will automatically close resources on exec() calls.
closed (get, set) If true will notify object was closed.
destructor Call the object's destructor.
discard Discards the given number of bytes.
protected set eos (get, set) If true will notify end of stream.
eos_mark Marks the end-of-stream. Signals nothing else will be written.
finalize Called at the end of efl_add. Should not be called, just overridden.
flush Forces writing all pending data to destination.
line_delimiter (get, set) If set incoming data will be checked for the delimiter and "line" events. The line may include the delimiter, unless it's end-of-stream in Efl.Io.Buffered_Stream.max_queue_size_input has been reached.
max_queue_size_input (get, set) Limits how big the input queue can grow, in bytes.
max_queue_size_output (get, set) Limits how big the output queue can grow in bytes.
pending_read (get) How many bytes are pending (available) for read
pending_write (get) How many bytes are pending write to Efl.Io.Buffered_Stream.inner_io
progress (get) How many bytes were written and read.
read Reads data into a pre-allocated buffer.
read_chunk_size (get, set) Reads chunk size property, in bytes.
slice (get) Gets a temporary access to input queue's internal read memory.
timeout_inactivity (get, set) Error as ETIMEDOUT if it becomes inactive for some time.
write Writes data from a pre-populated buffer.
Efl.Loop.Consumer
loop (get) The loop to which this object belongs to.
parent (get, set) The parent of an object.
Efl.Object
allow_parent_unref (get, set) Allow an object to be deleted by unref even if it has a parent.
children_iterator_new Get an iterator on all childrens
comment (get, set) A human readable comment for the object
composite_attach Make an object a composite object of another.
composite_detach Detach a composite object from another object.
composite_part_is Check if an object is part of a composite object.
constructor Call the object's constructor.
debug_name_override Build a read-only name for this object used for debugging.
del Unrefs the object and reparents it to NULL.
event_callback_forwarder_add Add an event callback forwarder for an event and an object.
event_callback_forwarder_del Remove an event callback forwarder for an event and an object.
event_callback_stop Stop the current callback call.
event_freeze Freeze events of object.
event_freeze_count (get) Return freeze events of object.
class event_global_freeze Freeze events of object.
class event_global_freeze_count (get) Return freeze events of object.
class event_global_thaw Thaw events of object.
event_thaw Thaw events of object.
finalized (get) True if the object is already finalized, otherwise false.
name (get, set) The name of the object.
name_find Find a child object with the given name and return it.
provider_find Searches upwards in the object tree for a provider which knows the given class/interface.

Events

Inherited

Efl.Io.Buffered_Stream
error An error has occurred and I/O has stopped
finished Both read and write are finished.
line If Efl.Io.Buffered_Stream.line_delimiter is set, will be emitted with current line. The memory is only valid during event callback dispatched and should not be modified. Note that the line slice may not be inside Efl.Io.Buffered_Stream.slice.
progress Property Efl.Io.Buffered_Stream.progress changed
read,finished Same as Efl.Io.Reader "eos", for consistency.
slice,changed The read-slice returned by Efl.Io.Buffered_Stream.slice may have changed.
write,finished Efl.Io.Buffered_Stream.eos_mark was called and all available data was sent to destination
Efl.Io.Closer
closed Notifies closed, when property is marked as true
Efl.Io.Reader
can_read,changed Notifies can_read property changed.
eos Notifies end of stream, when property is marked as true.
Efl.Io.Writer
can_write,changed Notifies can_write property changed.
Efl.Object
callback,add A callback was added.
callback,del A callback was deleted.
del Object is being deleted.
destruct Object has been fully destroyed. It can not be used beyond this point. This event should only serve to clean up any dangling pointer.