ACE 8.0.0
Loading...
Searching...
No Matches
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 ()
 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 ()
 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 ()
 Close down the pipe HANDLEs;.
 
int close_read ()
 
int close_write ()
 
ACE_HANDLE read_handle () const
 
ACE_HANDLE write_handle () const
 
void dump () 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 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() [1/3]

ACE_Pipe::ACE_Pipe ( )

Default constructor (does nothing...).

◆ ACE_Pipe() [2/3]

ACE_Pipe::ACE_Pipe ( ACE_HANDLE handles[2])

Open the pipe and initialize the handles.

◆ ACE_Pipe() [3/3]

ACE_Pipe::ACE_Pipe ( ACE_HANDLE read,
ACE_HANDLE write )

Initialize the ACE_Pipe from the read and write handles.

◆ ~ACE_Pipe()

ACE_Pipe::~ACE_Pipe ( )
inline

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

Member Function Documentation

◆ close()

int ACE_Pipe::close ( )

Close down the pipe HANDLEs;.

◆ close_handle()

int ACE_Pipe::close_handle ( int which)
inlineprivate

◆ close_read()

int ACE_Pipe::close_read ( )

◆ close_write()

int ACE_Pipe::close_write ( )

◆ dump()

void ACE_Pipe::dump ( ) const

Dump the state of the object.

◆ open() [1/2]

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

Open the pipe and initialize the handles.

◆ open() [2/2]

int ACE_Pipe::open ( int buffer_size = ACE_DEFAULT_MAX_SOCKET_BUFSIZ)

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

◆ read_handle()

ACE_HANDLE ACE_Pipe::read_handle ( ) 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.

◆ recv() [1/4]

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

Recv iovecs via <::readv>.

◆ recv() [2/4]

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!

◆ recv() [3/4]

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

Recv upto n bytes in buf.

◆ recv() [4/4]

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.

◆ recv_n()

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

Recv n bytes, keep trying until n are received.

◆ recvv_n()

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

Receive an iovec of size n to the file.

◆ send() [1/4]

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

Send iovecs via <::writev>.

◆ send() [2/4]

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

send upto n bytes in buf.

◆ send() [3/4]

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.

◆ send() [4/4]

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!

◆ send_n() [1/2]

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.

◆ send_n() [2/2]

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

Send n bytes, keep trying until n are sent.

◆ sendv()

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

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

◆ sendv_n()

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.

◆ write_handle()

ACE_HANDLE ACE_Pipe::write_handle ( ) 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

◆ handles_

ACE_HANDLE ACE_Pipe::handles_[2]
private

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