diff options
author | schmidt <douglascraigschmidt@users.noreply.github.com> | 2005-09-20 13:40:57 +0000 |
---|---|---|
committer | schmidt <douglascraigschmidt@users.noreply.github.com> | 2005-09-20 13:40:57 +0000 |
commit | f323394412a61141d439faef596fe272a7aa00b1 (patch) | |
tree | e1450e5c84176d4200fb5ddc6a8b395e458a3923 /ace/Pipe.h | |
parent | 29fa76063efabe9c9c982ffb7b74fa6b3e2553b5 (diff) | |
download | ATCD-f323394412a61141d439faef596fe272a7aa00b1.tar.gz |
ChangeLogTag:Tue Sep 20 10:10:00 UTC 2005 Simon Massey <simon.massey@prismtech.com>
Diffstat (limited to 'ace/Pipe.h')
-rw-r--r-- | ace/Pipe.h | 73 |
1 files changed, 72 insertions, 1 deletions
diff --git a/ace/Pipe.h b/ace/Pipe.h index e6a0d153079..f8f103dd9f0 100644 --- a/ace/Pipe.h +++ b/ace/Pipe.h @@ -10,7 +10,6 @@ */ //========================================================================== - #ifndef ACE_PIPE_H #define ACE_PIPE_H @@ -24,6 +23,13 @@ #include "ace/Default_Constants.h" +#include "ace/OS_NS_sys_uio.h" +#include "ace/OS_NS_unistd.h" + +// Forward decl. +class ACE_Message_Block; +class ACE_Time_Value; + /** * @class ACE_Pipe * @@ -77,6 +83,71 @@ public: /// Dump the state of the object. void dump (void) const; + /// send upto <n> bytes in <buf>. + ssize_t send (const void *buf, size_t n) const; + + /// Recv upto <n> bytes in <buf>. + ssize_t recv (void *buf, size_t n) const; + + /// Send n bytes, keep trying until n are sent. + ssize_t send_n (const void *buf, size_t n) const; + + /// Send all the <message_block>s chained through their <next> and + /// <cont> pointers. This call uses the underlying OS gather-write + /// operation to reduce the domain-crossing penalty. + ssize_t send_n (const ACE_Message_Block *message_block, + const ACE_Time_Value *timeout = 0, + size_t *bytes_transferred = 0); + + /// Recv n bytes, keep trying until n are received. + ssize_t recv_n (void *buf, size_t n) const; + + /// Send iovecs via <::writev>. + ssize_t send (const iovec iov[], int n) const; + + /// Recv iovecs via <::readv>. + ssize_t recv (iovec iov[], int 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 send (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 recv (size_t n, ...) const; + + /// Send <n> bytes via Win32 WriteFile using overlapped I/O. + ssize_t send (const void *buf, + size_t n, + ACE_OVERLAPPED *overlapped) const; + + /// Recv <n> bytes via Win32 ReadFile using overlapped I/O. + ssize_t recv (void *buf, + size_t n, + ACE_OVERLAPPED *overlapped) const; + + /// Send an <iovec> of size <n> to the file. + ssize_t sendv (const iovec iov[], + int n) const; + + /// Send an <iovec> of size <n> to the file. Will block until all + /// bytes are sent or an error occurs. + ssize_t sendv_n (const iovec iov[], + int n) const; + + /// Receive an <iovec> of size <n> to the file. + ssize_t recvv_n (iovec iov[], + int n) const; + private: ACE_HANDLE handles_[2]; }; |