### Struct

# Gio InputMessage

since: 2.48

#### Description

    struct GInputMessage {
      GSocketAddress** address;
      GInputVector* vectors;
      guint num_vectors;
      gsize bytes_received;
      gint flags;
      GSocketControlMessage*** control_messages;
      guint* num_control_messages;
    }

Structure used for scatter/gather data input when receiving multiple messages or packets in one go. You generally pass in an array of empty `GInputVectors` and the operation will use all the buffers as if they were one buffer, and will set `bytes_received` to the total number of bytes received across all `GInputVectors`.

This structure closely mirrors `struct mmsghdr` and `struct msghdr` from the POSIX sockets API (see `man 2 recvmmsg`).

If `address` is non-`NULL` then it is set to the source address the message was received from, and the caller must free it afterwards.

If `control_messages` is non-`NULL` then it is set to an array of control messages received with the message (if any), and the caller must free it afterwards. `num_control_messages` is set to the number of elements in this array, which may be zero.

Flags relevant to this message will be returned in `flags`. For example, `MSG_EOR` or `MSG_TRUNC`.

###### Structure members

`address`

  Return location for a `GSocketAddress`, or `NULL`.

`vectors`

  Pointer to an array of input vectors.

`num_vectors`

  The number of input vectors pointed to by `vectors`.

`bytes_received`

  Will be set to the number of bytes that have been received.

`flags`

  Collection of `GSocketMsgFlags` for the received message, outputted by the call.

`control_messages`

  Return location for a caller-allocated array of `GSocketControlMessages`, or `NULL`.

`num_control_messages`

  Return location for the number of elements in `control_messages`.

Available since: 2.48