ACE  6.2.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
ACE_Pipe Class Reference

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

#include <Pipe.h>

Public Member Functions

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

Private Member Functions

int close_handle (int which)
 

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

int ACE_Pipe::close_handle ( int  which)
inlineprivate
int ACE_Pipe::close_read ( void  )
int ACE_Pipe::close_write ( void  )
void ACE_Pipe::dump ( void  ) const

Dump the state of the object.

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

Open the pipe and initialize the handles.

int ACE_Pipe::open ( int  buffer_size = ACE_DEFAULT_MAX_SOCKET_BUFSIZ)

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

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 
) const
inline

Recv upto n bytes in buf.

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

Recv iovecs via <::readv>.

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 count of the number of tuple pairs!

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_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 
) const
inline

send upto n bytes in buf.

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

Send iovecs via <::writev>.

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 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_n ( const void *  buf,
size_t  n 
) const
inline

Send n bytes, keep trying until n are sent.

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::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: