next up previous contents
Next: 8.15 fluke_ipc_side_alert: send an Up: 8 Interprocess Communication Previous: 8.13 fluke_ipc_side_ack_send: become the

8.14 fluke_ipc_side_ack_send_over_receive: reverse a reliable IPC connection, send a message and reverse again

SYNOPSIS

fluke_error_t fluke_ipc_side_ack_send_over_receive(fluke_ipc_params_t *ipc_params);

DESCRIPTION

This function is a combination of fluke_ipc_side_ack_send and fluke_ipc_side_over_receive. The caller, initially the receiver on a reliable IPC connection, reverses the channel, sends a message and reverses back to become the receiver again.

PARAMETERS

ipc_params
A pointer to a structure describing data and references to send, and the buffers and references to receive the response into. Only the receive parameter fields are modified by the call.

RETURNS

Returns one of the following codes: All of these have an implicit FLUKE_ prefix.
SUCCESS
The caller successfully sent the entire message described in the ipc_params send fields and then received a message into the initial receive buffers and references in ipc_params. The other side is now ready to reverse the connection again.
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.
IPC_OVER_DISCONNECTED
The connection was reversed and a message sent, but the IPC connection was broken unexpectedly for some reason before the second reversal actually took place.
IPC_RECV_MORE_DATA
During the receive phase, all of the provided data buffers filled up before the sender finished transferring its first message. The caller must make more room for incoming data and use fluke_ipc_side_receive to receive it. The ipc_params structure is updated appropriately to indicate the amount of data received.
IPC_RECV_MORE_REFS
During the receive phase, all of the provided references were filled before the sender finished transferring its first message. The caller must make room for more references and use fluke_ipc_side_receive to receive them. The ipc_params structure is updated appropriately to indicate the number of references received.
IPC_RECV_DISCONNECTED
During the receive phase, the sender disconnected after sending some data but before the receive buffers were filled. The ipc_params structure is updated appropriately to indicate the amount of data and references received. This return code often indicates normal connection termination.

ERRORS

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.

RELATED INFORMATION

fluke_ipc_side_ack_send, fluke_ipc_side_over_receive, fluke_ipc_side_receive


next up previous contents
Next: 8.15 fluke_ipc_side_alert: send an Up: 8 Interprocess Communication Previous: 8.13 fluke_ipc_side_ack_send: become the

Utah Flux Research Group