Class SocketControlMessage

All Implemented Interfaces:
Proxy
Direct Known Subclasses:
IPTosMessage, IPv6TclassMessage, SocketControlMessage.SocketControlMessage$Impl, UnixCredentialsMessage

@Generated("org.javagi.JavaGI") public abstract class SocketControlMessage extends GObject

A GSocketControlMessage is a special-purpose utility message that can be sent to or received from a Socket. These types of messages are often called ‘ancillary data’.

The message can represent some sort of special instruction to or information from the socket or can represent a special kind of transfer to the peer (for example, sending a file descriptor over a UNIX socket).

These messages are sent with Socket.sendMessage(SocketAddress, OutputVector[], SocketControlMessage[], int, Cancellable) and received with Socket.receiveMessage(Out, InputVector[], Out, Out, Cancellable).

To extend the set of control messages that can be sent, subclass this class and override the get_size, get_level, get_type and serialize methods.

To extend the set of control messages that can be received, subclass this class and implement the deserialize method. Also, make sure your class is registered with the GObject.Type type system before calling Socket.receiveMessage(Out, InputVector[], Out, Out, Cancellable) to read such a message.

Since:
2.22
  • Constructor Details

    • SocketControlMessage

      public SocketControlMessage(MemorySegment address)
      Create a SocketControlMessage instance for the provided memory address.
      Parameters:
      address - the memory address of the native object
    • SocketControlMessage

      public SocketControlMessage()
      Create a new SocketControlMessage.
  • Method Details

    • getType

      public static @Nullable Type getType()
      Get the GType of the SocketControlMessage class.
      Returns:
      the GType
    • getMemoryLayout

      public static MemoryLayout getMemoryLayout()
      The memory layout of the native struct.
      Returns:
      the memory layout
    • asParent

      protected SocketControlMessage asParent()
      Return this instance as if it were its parent type. Comparable to the Java super keyword, but ensures the parent typeclass is also used in native code.
      Overrides:
      asParent in class GObject
      Returns:
      the instance as if it were its parent type
    • deserialize

      public static @Nullable SocketControlMessage deserialize(int level, int type, @Nullable byte @Nullable [] data)

      Tries to deserialize a socket control message of a given level and type. This will ask all known (to GType) subclasses of GSocketControlMessage if they can understand this kind of message and if so deserialize it into a GSocketControlMessage.

      If there is no implementation for this kind of control message, null will be returned.

      Parameters:
      level - a socket level
      type - a socket control message type for the given level
      data - pointer to the message data
      Returns:
      the deserialized message or null
      Since:
      2.22
    • getLevel

      public int getLevel()
      Returns the "level" (i.e. the originating protocol) of the control message. This is often SOL_SOCKET.
      Returns:
      an integer describing the level
      Since:
      2.22
    • getMsgType

      public int getMsgType()
      Returns the protocol specific type of the control message. For instance, for UNIX fd passing this would be SCM_RIGHTS.
      Returns:
      an integer describing the type of control message
      Since:
      2.22
    • getSize

      public long getSize()
      Returns the space required for the control message, not including headers or alignment.
      Returns:
      The number of bytes required.
      Since:
      2.22
    • serialize

      public void serialize(MemorySegment data)

      Converts the data in the message to bytes placed in the message.

      data is guaranteed to have enough space to fit the size returned by g_socket_control_message_get_size() on this object.

      Parameters:
      data - A buffer to write data to
      Since:
      2.22