ACE_Pipe Class Reference

Provides a portable bidirectional "pipe" abstraction. More...

#include <Pipe.h>

List of all members.

Public Member Functions

 ACE_Pipe (void)
 Default constructor (does nothing...).
 ACE_Pipe (ACE_HANDLE handles[2])
 Open the pipe and initialize the handles.
 ACE_Pipe (ACE_HANDLE read, ACE_HANDLE write)
 Initialize the ACE_Pipe from the read and write handles.
 ~ACE_Pipe (void)
 Default dtor. It doesn't close the handles for you.
int open (ACE_HANDLE handles[2])
 Open the pipe and initialize the handles.
int open (int buffer_size=ACE_DEFAULT_MAX_SOCKET_BUFSIZ)
 Open the pipe, setting the buffer size to the maximum.
int close (void)
 Close down the pipe HANDLEs;.
ACE_HANDLE read_handle (void) const
ACE_HANDLE write_handle (void) const
void dump (void) const
 Dump the state of the object.
ssize_t send (const void *buf, size_t n) const
 send upto n bytes in buf.
ssize_t recv (void *buf, size_t n) const
 Recv upto n bytes in buf.
ssize_t send_n (const void *buf, size_t n) const
 Send n bytes, keep trying until n are sent.
ssize_t send_n (const ACE_Message_Block *message_block, const ACE_Time_Value *timeout=0, size_t *bytes_transferred=0)
ssize_t recv_n (void *buf, size_t n) const
 Recv n bytes, keep trying until n are received.
ssize_t send (const iovec iov[], int n) const
 Send iovecs via <writev>.
ssize_t recv (iovec iov[], int n) const
 Recv iovecs via <readv>.
ssize_t send (size_t n,...) const
ssize_t recv (size_t n,...) const
ssize_t send (const void *buf, size_t n, ACE_OVERLAPPED *overlapped) const
 Send n bytes via Win32 WriteFile using overlapped I/O.
ssize_t recv (void *buf, size_t n, ACE_OVERLAPPED *overlapped) const
 Recv n bytes via Win32 ReadFile using overlapped I/O.
ssize_t sendv (const iovec iov[], int n) const
 Send an <iovec> of size n to the file.
ssize_t sendv_n (const iovec iov[], int n) const
ssize_t recvv_n (iovec iov[], int n) const
 Receive an iovec of size n to the file.

Private Attributes

ACE_HANDLE handles_ [2]


Detailed Description

Provides a portable bidirectional "pipe" abstraction.

This class is designed to work with select()-based demuxers, such as the ACE_Select_Reactor, which is why it uses sockets on Windows rather than Win32 pipes (which aren't select()'able).


Constructor & Destructor Documentation

ACE_Pipe::ACE_Pipe ( void   ) 

Default constructor (does nothing...).

ACE_Pipe::ACE_Pipe ( ACE_HANDLE  handles[2]  ) 

Open the pipe and initialize the handles.

ACE_Pipe::ACE_Pipe ( ACE_HANDLE  read,
ACE_HANDLE  write 
)

Initialize the ACE_Pipe from the read and write handles.

ACE_Pipe::~ACE_Pipe ( void   )  [inline]

Default dtor. It doesn't close the handles for you.


Member Function Documentation

int ACE_Pipe::close ( void   ) 

Close down the pipe HANDLEs;.

void ACE_Pipe::dump ( void   )  const

Dump the state of the object.

int ACE_Pipe::open ( int  buffer_size = ACE_DEFAULT_MAX_SOCKET_BUFSIZ  ) 

Open the pipe, setting the buffer size to the maximum.

int ACE_Pipe::open ( ACE_HANDLE  handles[2]  ) 

Open the pipe and initialize the handles.

ACE_HANDLE ACE_Pipe::read_handle ( void   )  const [inline]

This is the "read" side of the pipe. Note, however, that processes can also write to this handle as well since pipes are bi-directional.

ssize_t ACE_Pipe::recv ( void *  buf,
size_t  n,
ACE_OVERLAPPED overlapped 
) const [inline]

Recv n bytes via Win32 ReadFile using overlapped I/O.

ssize_t ACE_Pipe::recv ( size_t  n,
  ... 
) const

This is an interface to readv, that doesn't use the struct iovec explicitly. The ... can be passed as an arbitrary number of (char *ptr, int len) tuples. However, the count N is the *total* number of trailing arguments, *not* a couple of the number of tuple pairs!

ssize_t ACE_Pipe::recv ( iovec  iov[],
int  n 
) const [inline]

Recv iovecs via <readv>.

ssize_t ACE_Pipe::recv ( void *  buf,
size_t  n 
) const [inline]

Recv upto n bytes in buf.

ssize_t ACE_Pipe::recv_n ( void *  buf,
size_t  n 
) const [inline]

Recv n bytes, keep trying until n are received.

ssize_t ACE_Pipe::recvv_n ( iovec  iov[],
int  n 
) const [inline]

Receive an iovec of size n to the file.

ssize_t ACE_Pipe::send ( const void *  buf,
size_t  n,
ACE_OVERLAPPED overlapped 
) const [inline]

Send n bytes via Win32 WriteFile using overlapped I/O.

ssize_t ACE_Pipe::send ( size_t  n,
  ... 
) const

Send N char *ptrs and int lengths. Note that the char *'s precede the ints (basically, an varargs version of writev). The count N is the *total* number of trailing arguments, *not* a couple of the number of tuple pairs!

ssize_t ACE_Pipe::send ( const iovec  iov[],
int  n 
) const [inline]

Send iovecs via <writev>.

ssize_t ACE_Pipe::send ( const void *  buf,
size_t  n 
) const [inline]

send upto n bytes in buf.

ssize_t ACE_Pipe::send_n ( const ACE_Message_Block message_block,
const ACE_Time_Value timeout = 0,
size_t *  bytes_transferred = 0 
) [inline]

Send all the message_blocks chained through their <next> and <cont> pointers. This call uses the underlying OS gather-write operation to reduce the domain-crossing penalty.

ssize_t ACE_Pipe::send_n ( const void *  buf,
size_t  n 
) const [inline]

Send n bytes, keep trying until n are sent.

ssize_t ACE_Pipe::sendv ( const iovec  iov[],
int  n 
) const [inline]

Send an <iovec> of size n to the file.

ssize_t ACE_Pipe::sendv_n ( const iovec  iov[],
int  n 
) const [inline]

Send an iovec of size n to the file. Will block until all bytes are sent or an error occurs.

ACE_HANDLE ACE_Pipe::write_handle ( void   )  const [inline]

This is the "write" side of the pipe. Note, however, that processes can also read to this handle as well since pipes are bi-directional.


Member Data Documentation

ACE_HANDLE ACE_Pipe::handles_[2] [private]


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

Generated on Mon Jul 13 16:12:30 2009 for ACE by  doxygen 1.5.8