# ACE_MEM_IO Class Reference

Defines the methods for the ACE shared memeory wrapper I/O routines (e.g., send/recv). The shared memory transport uses ACE_SOCK_* class to implement the signaling mechanism so we can easily use the new mechanism with the Reactor pattern (which uses select under the hood.) ACE_MEM_Acceptor and ACE_MEM_Connector are used to establish connections. When a connection is established, ACE_MEM_Acceptor creates the MMAP file for data exchange and sends the location of the file (complete path name) to ACE_MEM_Connector thru the socket. ACE_MEM_Connector then reads the location of the file off the socket and opens up the same MMAP file. ACE_MEM_Stream at each side then contains a reference to the ACE_Mallo object using the same MMAP file. When sending information using methods provided in this class, ACE_MEM_IO requests a chunk of memory from the MALLOC_TYPE object, copy the data into the shared memory and send the memory offset (from the start of the ACE_Malloc) across the socket. This action also servers as a signal to the other end. The receiving side then reverses the procedures and copies the information into user buffer. More...

`#include <MEM_IO.h>`

Inheritance diagram for ACE_MEM_IO:

[legend]
Collaboration diagram for ACE_MEM_IO:

[legend]
List of all members.

## Public Types

enum | Signal_Strategy { Reactive, MT }

## Public Member Functions

| ACE_MEM_IO (void)
| Constructor.
| ~ACE_MEM_IO (void)
| Destructor.
int | init (const ACE_TCHAR *name, ACE_MEM_IO::Signal_Strategy type=ACE_MEM_IO::Reactive, ACE_MEM_SAP::MALLOC_OPTIONS *options=0)
int | fini (void)
ssize_t | send (const void *buf, size_t n, int flags)
ssize_t | recv (void *buf, size_t n, int flags)
| Recv an <n> byte buffer from the shm_malloc_ thru connected socket.
ssize_t | send (const void *buf, size_t n)
ssize_t | recv (void *buf, size_t n)
| Recv an <n> byte buffer from the shm_malloc_ thru connected socket.
ssize_t | send (const void *buf, size_t n, const ACE_Time_Value *timeout)
ssize_t | send (const void *buf, size_t n, int flags, const ACE_Time_Value *timeout)
ssize_t | send (const ACE_Message_Block *message_block, const ACE_Time_Value *timeout)
ssize_t | recv (void *buf, size_t n, const ACE_Time_Value *timeout)
ssize_t | recv (void *buf, size_t n, int flags, const ACE_Time_Value *timeout)
void | dump (void) const
| Dump the state of an object.

## Public Attributes

| ACE_ALLOC_HOOK_DECLARE
| Declare the dynamic allocation hooks.

## Private Member Functions

ssize_t | fetch_recv_buf (int flag, const ACE_Time_Value *timeout)

## Private Attributes

ACE_MEM_SAP * | deliver_strategy_
| Actual deliverying mechanism.
ACE_MEM_SAP_Node * | recv_buffer_
| Internal pointer for support recv/send.
ssize_t | buf_size_
| Record the current total buffer size of <recv_buffer_>.
ssize_t | cur_offset_
| Record the current read pointer location in <recv_buffer_>.

## Detailed Description

Defines the methods for the ACE shared memeory wrapper I/O routines (e.g., send/recv). The shared memory transport uses ACE_SOCK_* class to implement the signaling mechanism so we can easily use the new mechanism with the Reactor pattern (which uses select under the hood.) ACE_MEM_Acceptor and ACE_MEM_Connector are used to establish connections. When a connection is established, ACE_MEM_Acceptor creates the MMAP file for data exchange and sends the location of the file (complete path name) to ACE_MEM_Connector thru the socket. ACE_MEM_Connector then reads the location of the file off the socket and opens up the same MMAP file. ACE_MEM_Stream at each side then contains a reference to the ACE_Mallo object using the same MMAP file. When sending information using methods provided in this class, ACE_MEM_IO requests a chunk of memory from the MALLOC_TYPE object, copy the data into the shared memory and send the memory offset (from the start of the ACE_Malloc) across the socket. This action also servers as a signal to the other end. The receiving side then reverses the procedures and copies the information into user buffer.

## Member Enumeration Documentation

enum ACE_MEM_IO::Signal_Strategy

Enumeration values:

  Reactive |
  MT |

## Constructor & Destructor Documentation

ACE_INLINE ACE_MEM_IO::ACE_MEM_IO | ( | void |  | ) |

| Constructor.

ACE_INLINE ACE_MEM_IO::~ACE_MEM_IO | ( | void |  | ) |

| Destructor.

## Member Function Documentation

void ACE_MEM_IO::dump | ( | void |  | ) | const

| Dump the state of an object. Reimplemented from ACE_SOCK. Reimplemented in ACE_MEM_Stream.

ACE_INLINE ssize_t ACE_MEM_IO::fetch_recv_buf | ( | int | flag,
|  | const ACE_Time_Value * | timeout
| ) | `[private]`

| Return the local endpoint port number. Returns 0 if successful, else -1.

int ACE_MEM_IO::fini | ( | void |  | ) |

| Finalizing the MEM_IO object. This method doesn't invoke the <remove> method.

int ACE_MEM_IO::init | ( | const ACE_TCHAR * | name,
|  | ACE_MEM_IO::Signal_Strategy | type = `ACE_MEM_IO::Reactive`,
|  | ACE_MEM_SAP::MALLOC_OPTIONS * | options = `0`
| ) |

| Initialize the MEM_SAP object.

ACE_INLINE ssize_t ACE_MEM_IO::recv | ( | void * | buf,
|  | size_t | n,
|  | int | flags,
|  | const ACE_Time_Value * | timeout
| ) |

| Wait up to <timeout> amount of time to receive up to <n> bytes into <buf> from <handle> (uses the <recv> call). If <recv> times out a -1 is returned with <errno == ETIME>. If it succeeds the number of bytes received is returned.

ACE_INLINE ssize_t ACE_MEM_IO::recv | ( | void * | buf,
|  | size_t | n,
|  | const ACE_Time_Value * | timeout
| ) |

| Wait up to <timeout> amount of time to receive up to <n> bytes into <buf> from <handle> (uses the <recv> call). If <recv> times out a -1 is returned with <errno == ETIME>. If it succeeds the number of bytes received is returned.

ACE_INLINE ssize_t ACE_MEM_IO::recv | ( | void * | buf,
|  | size_t | n
| ) |

| Recv an <n> byte buffer from the shm_malloc_ thru connected socket.

ACE_INLINE ssize_t ACE_MEM_IO::recv | ( | void * | buf,
|  | size_t | n,
|  | int | flags
| ) |

| Recv an <n> byte buffer from the shm_malloc_ thru connected socket.

ssize_t ACE_MEM_IO::send | ( | const ACE_Message_Block * | message_block,
|  | const ACE_Time_Value * | timeout
| ) |

| Wait to to <timeout> amount of time to send the <message_block>. If <send> times out a -1 is returned with <errno == ETIME>. If it succeeds the number of bytes sent is returned.

ACE_INLINE ssize_t ACE_MEM_IO::send | ( | const void * | buf,
|  | size_t | n,
|  | int | flags,
|  | const ACE_Time_Value * | timeout
| ) |

| Wait to to <timeout> amount of time to send up to <n> bytes into <buf> from <handle> (uses the <send> call). If <send> times out a -1 is returned with <errno == ETIME>. If it succeeds the number of bytes sent is returned.

ACE_INLINE ssize_t ACE_MEM_IO::send | ( | const void * | buf,
|  | size_t | n,
|  | const ACE_Time_Value * | timeout
| ) |

| Wait to to <timeout> amount of time to send up to <n> bytes into <buf> from <handle> (uses the <send> call). If <send> times out a -1 is returned with <errno == ETIME>. If it succeeds the number of bytes sent is returned.

ACE_INLINE ssize_t ACE_MEM_IO::send | ( | const void * | buf,
|  | size_t | n
| ) |

| Send an <n> byte buffer to the other process using shm_malloc_ connected thru the socket.

ACE_INLINE ssize_t ACE_MEM_IO::send | ( | const void * | buf,
|  | size_t | n,
|  | int | flags
| ) |

| Send an <n> byte buffer to the other process using shm_malloc_ connected thru the socket.

## Member Data Documentation

ACE_MEM_IO::ACE_ALLOC_HOOK_DECLARE

| Declare the dynamic allocation hooks. Reimplemented from ACE_SOCK. Reimplemented in ACE_MEM_Stream.

ssize_t ACE_MEM_IO::buf_size_ `[private]`

| Record the current total buffer size of <recv_buffer_>.

ssize_t ACE_MEM_IO::cur_offset_ `[private]`

| Record the current read pointer location in <recv_buffer_>.

ACE_MEM_SAP* ACE_MEM_IO::deliver_strategy_ `[private]`

| Actual deliverying mechanism.

ACE_MEM_SAP_Node* ACE_MEM_IO::recv_buffer_ `[private]`

| Internal pointer for support recv/send.

The documentation for this class was generated from the following files:

- MEM_IO.h
- MEM_IO.cpp
- MEM_IO.inl