Gio.Socket.prototype.receive_message

function receive_message(vectors: Array(Gio.InputVector), messages: Array(Gio.SocketControlMessage), flags: Number(gint), cancellable: Gio.Cancellable): [return_value: Number(gssize), address: Gio.SocketAddress] {
    // Gjs wrapper for g_socket_receive_message()
}
  

Receive data from a socket. This is the most complicated and fully-featured version of this call. For easier use, see Gio.Socket.prototype.receive and Gio.Socket.prototype.receive_from.

If address is non-null then address will be set equal to the source address of the received packet. address is owned by the caller.

@vector must point to an array of Gio.InputVector structs and num_vectors must be the length of this array. These structs describe the buffers that received data will be scattered into. If num_vectors is -1, then vectors is assumed to be terminated by a Gio.InputVector with a null buffer pointer.

As a special case, if num_vectors is 0 (in which case, vectors may of course be null), then a single byte is received and discarded. This is to facilitate the common practice of sending a single '\0' byte for the purposes of transferring ancillary data.

messages, if non-null, will be set to point to a newly-allocated array of Gio.SocketControlMessage instances or null if no such messages was received. These correspond to the control messages received from the kernel, one Gio.SocketControlMessage per message from the kernel. This array is null-terminated and must be freed by the caller using GLib.free after calling GObject.Object.prototype.unref on each element. If messages is null, any control messages received will be discarded.

num_messages, if non-null, will be set to the number of control messages received.

If both messages and num_messages are non-null, then num_messages gives the number of Gio.SocketControlMessage instances in messages (ie: not including the null terminator).

flags is an in/out parameter. The commonly available arguments for this are available in the Gio.SocketMsgFlags enum, but the values there are the same as the system values, and the flags are passed in as-is, so you can pass in system-specific flags too (and Gio.Socket.prototype.receive_message may pass system-specific flags out).

As with Gio.Socket.prototype.receive, data may be discarded if socket is Gio.SocketType.datagram or Gio.SocketType.seqpacket and you do not provide enough buffer space to read a complete message. You can pass Gio.SocketMsgFlags.peek in flags to peek at the current message without removing it from the receive queue, but there is no portable way to find out the length of the message other than by reading it into a sufficiently-large buffer.

If the socket is in blocking mode the call will block until there is some data to receive, the connection is closed, or there is an error. If there is no data available and the socket is in non-blocking mode, a Gio.IOErrorEnum.would_block error will be returned. To be notified when data is available, wait for the GLib.IOCondition.in condition.

On error -1 is returned and @error is set accordingly.

Since 2.22

vectors

an array of Gio.InputVector structs

messages

a pointer which may be filled with an array of #GSocketControlMessages, or null

flags

a pointer to an int containing Gio.SocketMsgFlags flags

cancellable

a %GCancellable or null

return_value

Number of bytes read, or 0 if the connection was closed by the peer, or -1 on error

address

a pointer to a Gio.SocketAddress pointer, or null