fluke_error_t fluke_ipc_side_ack_send(fluke_ipc_params_t *ipc_params);
This function completes the reversal of a reliable IPC connection. It allows the caller (the current receiver on a reliable IPC connection) to switch roles and become the sender after the current sender initiates the reversal with an over_receive operation. If the current sender is still trying to send data, that data will quietly be discarded and the caller will block until the sender does an over_receive operation. If the sender was already waiting in an over_receive, the reversal takes place immediately.
- ipc_params
- A pointer to a structure describing data buffers and reference objects to send. Only the send parameter fields in this structure are used; the receive parameter fields are ignored. All fields remain unmodified by the call.
Returns one of the following codes: All of these have an implicit FLUKE_ prefix.
- SUCCESS
- The connection reversal has succeeded and the entire message described in the ipc_params structure has been sent.
- IPC_ACK_DISCONNECTED
- The IPC connection does not exist, or was broken unexpectedly for some reason before the connection reversal actually took place, e.g. because the other side disconnected or was terminated.
- IPC_SEND_DISCONNECTED
- The connection was reversed successfully, but the receiver disconnected afterwards before the message was completely sent.
If any of the following errors is detected by the Fluke implementation, it causes the current thread to take a synchronous exception with one of the following codes. All of these have an implicit FLUKE_INSANITY_ prefix.
- NOT_RECEIVER
- The current thread is not the receiver on the specified IPC connection.
- NO_OBJECT
- A pointer in the ipc_params receive reference array does not refer to an active object.
- NOT_REF
- An object in the ipc_params receive reference array is not a reference object.
- INVALID_OBJECT
- The state of an object in the ipc_params receive reference array is invalid.
- BUFFER_TOO_SMALL
- The initial send data was smaller than FLUKE_MIN_MSG_SIZE.
- BUFFER_UNALIGNED
- A message buffer was not aligned properly according to the architecture-specific requirements.
fluke_ipc_side_over_receive, fluke_ipc_side_send, fluke_ipc_side_receive