NAME

ACE_MEM_IO - 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.

SYNOPSIS

#include <ace/MEM_IO.h>

class ACE_MEM_IO : public ACE_SOCK, public ACE_MEM_SAP { public: ACE_MEM_IO (void); ~ACE_MEM_IO (void); ssize_t send (const void *buf, size_t n, int flags); ssize_t recv (void *buf, size_t n, int flags); ssize_t send (const void *buf, size_t n); ssize_t recv (void *buf, size_t n); ssize_t send ( const void *buf, size_t n, int flags, const ACE_Time_Value *timeout ); ssize_t recv ( void *buf, size_t n, int flags, const ACE_Time_Value *timeout ); ssize_t send ( const void *buf, size_t n, const ACE_Time_Value *timeout ); ssize_t recv (void *buf, size_t n, const ACE_Time_Value *timeout); ssize_t send ( const ACE_Message_Block *message_block, const ACE_Time_Value *timeout ); void dump (void) const; ACE_ALLOC_HOOK_DECLARE; /* int get_local_port (u_short &) const; int get_remote_port (u_short &) const; protected: ssize_t fetch_recv_buf ( int flags, const ACE_Time_Value *timeout = 0 ); private: void *recv_buffer_; ssize_t buf_size_; ssize_t cur_offset_; };

Initialization and termination methods.

ACE_MEM_IO (void);

~ACE_MEM_IO (void);

ssize_t send (const void *buf, size_t n, int flags);

ssize_t recv (void *buf, size_t n, int flags);

ssize_t send (const void *buf, size_t n);

ssize_t recv (void *buf, size_t n);

ssize_t send (
    const void *buf,
    size_t n,
    int flags,
    const ACE_Time_Value *timeout
    );

ssize_t recv (
    void *buf,
    size_t n,
    int flags,
    const ACE_Time_Value *timeout
    );

ssize_t send (
    const void *buf,
    size_t n,
    const ACE_Time_Value *timeout
    );

ssize_t recv (void *buf, size_t n, const ACE_Time_Value *timeout);

ssize_t send (
    const ACE_Message_Block *message_block,
    const ACE_Time_Value *timeout
    );

void dump (void) const;

ACE_ALLOC_HOOK_DECLARE;

/* int get_local_port (u_short &) const;

int get_remote_port (u_short &) const;

AUTHOR

Nanbor Wang nanbor@cs.wustl.edu

LIBRARY

ace