ACE_SOCK_SEQPACK_Association Class Reference

Defines the methods in the ACE_SOCK_SEQPACK_Association abstraction. More...

#include <SOCK_SEQPACK_Association.h>

Inheritance diagram for ACE_SOCK_SEQPACK_Association:
Inheritance graph
[legend]
Collaboration diagram for ACE_SOCK_SEQPACK_Association:
Collaboration graph
[legend]

List of all members.

Public Types

typedef ACE_Multihomed_INET_Addr PEER_ADDR

Public Member Functions

 ACE_SOCK_SEQPACK_Association (void)
 Constructor.
 ACE_SOCK_SEQPACK_Association (ACE_HANDLE h)
 Constructor (sets the underlying ACE_HANDLE with <h>).
 ~ACE_SOCK_SEQPACK_Association (void)
 Destructor.
int get_local_addrs (ACE_INET_Addr *addrs, size_t &size) const
int get_remote_addrs (ACE_INET_Addr *addrs, size_t &size) const
ssize_t recv_n (void *buf, size_t len, int flags, const ACE_Time_Value *timeout=0, size_t *bytes_transferred=0) const
 Try to recv exactly len bytes into buf from the connected socket.
ssize_t recv_n (void *buf, size_t len, const ACE_Time_Value *timeout=0, size_t *bytes_transferred=0) const
 Try to recv exactly len bytes into buf from the connected socket.
ssize_t recvv_n (iovec iov[], int iovcnt, const ACE_Time_Value *timeout=0, size_t *bytes_transferred=0) const
 Receive an <iovec> of size <iovcnt> from the connected socket.
ssize_t send_n (const void *buf, size_t len, int flags, const ACE_Time_Value *timeout=0, size_t *bytes_transferred=0) const
 Try to send exactly len bytes from buf to the connection socket.
ssize_t send_n (const void *buf, size_t len, const ACE_Time_Value *timeout=0, size_t *bytes_transferred=0) const
 Try to send exactly len bytes from buf to the connected socket.
ssize_t send_n (const ACE_Message_Block *message_block, const ACE_Time_Value *timeout=0, size_t *bytes_transferred=0) const
ssize_t sendv_n (const iovec iov[], int iovcnt, const ACE_Time_Value *timeout=0, size_t *bytes_transferred=0) const
 Send an <iovec> of size <iovcnt> to the connected socket.
ssize_t send_urg (const void *ptr, size_t len=sizeof(char), const ACE_Time_Value *timeout=0) const
ssize_t recv_urg (void *ptr, size_t len=sizeof(char), const ACE_Time_Value *timeout=0) const
int close_reader (void)
 Close down the reader.
int close_writer (void)
 Close down the writer.
int close (void)
int abort (void)
void dump (void) const
 Dump the state of an object.

Public Attributes

 ACE_ALLOC_HOOK_DECLARE
 Declare the dynamic allocation hooks.

Detailed Description

Defines the methods in the ACE_SOCK_SEQPACK_Association abstraction.

This adds additional wrapper methods atop the <ACE_SOCK_IO> class.

buf is the buffer to write from or receive into. len is the number of bytes to transfer. The timeout parameter in the following methods indicates how long to blocking trying to transfer data. If timeout == 0, then the call behaves as a normal send/recv call, i.e., for blocking sockets, the call will block until action is possible; for non-blocking sockets, EWOULDBLOCK will be returned if no action is immediately possible. If timeout != 0, the call will wait for data to arrive no longer than the relative time specified in *timeout. The "_n()" I/O methods keep looping until all the data has been transferred. These methods also work for sockets in non-blocking mode i.e., they keep looping on EWOULDBLOCK. timeout is used to make sure we keep making progress, i.e., the same timeout value is used for every I/O operation in the loop and the timeout is not counted down. The return values for the "*_n()" methods match the return values from the non "_n()" methods and are specified as follows:

On partial transfers, i.e., if any data is transferred before timeout/error/EOF, <bytes_transferred> will contain the number of bytes transferred. Methods with <iovec> parameter are I/O vector variants of the I/O operations. Methods with the extra flags argument will always result in <send> getting called. Methods without the extra flags argument will result in <send> getting called on Win32 platforms, and <write> getting called on non-Win32 platforms.

Definition at line 78 of file SOCK_SEQPACK_Association.h.


Member Typedef Documentation

Definition at line 185 of file SOCK_SEQPACK_Association.h.


Constructor & Destructor Documentation

ACE_SOCK_SEQPACK_Association::ACE_SOCK_SEQPACK_Association ( void   ) 

Constructor.

Definition at line 11 of file SOCK_SEQPACK_Association.inl.

00012 {
00013   // ACE_TRACE ("ACE_SOCK_SEQPACK_Association::ACE_SOCK_SEQPACK_Association");
00014 }

ACE_SOCK_SEQPACK_Association::ACE_SOCK_SEQPACK_Association ( ACE_HANDLE  h  ) 

Constructor (sets the underlying ACE_HANDLE with <h>).

Definition at line 17 of file SOCK_SEQPACK_Association.inl.

00018 {
00019   // ACE_TRACE ("ACE_SOCK_SEQPACK_Association::ACE_SOCK_SEQPACK_Association");
00020   this->set_handle (h);
00021 }

ACE_SOCK_SEQPACK_Association::~ACE_SOCK_SEQPACK_Association ( void   ) 

Destructor.

Definition at line 24 of file SOCK_SEQPACK_Association.inl.

00025 {
00026   // ACE_TRACE ("ACE_SOCK_SEQPACK_Association::~ACE_SOCK_SEQPACK_Association");
00027 }


Member Function Documentation

int ACE_SOCK_SEQPACK_Association::abort ( void   ) 

Abort the association according to RFC 2960 9.1 through the API in draft-ietf-tsvwg-sctpsocket-09 7.1.4.

Definition at line 48 of file SOCK_SEQPACK_Association.cpp.

00049 {
00050   //
00051   // setsockopt() SO_LINGER configures socket to reap immediately.
00052   // Normal close then aborts the association.
00053   //
00054   linger slinger;
00055 
00056   slinger.l_onoff = 1;
00057   slinger.l_linger = 0;
00058 
00059   if (-1 == ACE_OS::setsockopt (this->get_handle (),
00060                                 SOL_SOCKET,
00061                                 SO_LINGER,
00062                                 reinterpret_cast<const char *> (&slinger),
00063                                 sizeof (linger)))
00064   {
00065     return -1;
00066   }
00067 
00068   return this->close ();
00069 }

int ACE_SOCK_SEQPACK_Association::close ( void   ) 

Close down the socket (we need this to make things work correctly on Win32, which requires use to do a <close_writer> before doing the close to avoid losing data).

Reimplemented from ACE_SOCK.

Definition at line 29 of file SOCK_SEQPACK_Association.cpp.

00030 {
00031 #if defined (ACE_WIN32)
00032   // We need the following call to make things work correctly on
00033   // Win32, which requires use to do a <close_writer> before doing the
00034   // close in order to avoid losing data.  Note that we don't need to
00035   // do this on UNIX since it doesn't have this "feature".  Moreover,
00036   // this will cause subtle problems on UNIX due to the way that
00037   // fork() works.
00038   this->close_writer ();
00039 #endif /* ACE_WIN32 */
00040   // Close down the socket.
00041   return ACE_SOCK::close ();
00042 }

int ACE_SOCK_SEQPACK_Association::close_reader ( void   ) 

Close down the reader.

Definition at line 30 of file SOCK_SEQPACK_Association.inl.

00031 {
00032   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::close_reader");
00033   if (this->get_handle () != ACE_INVALID_HANDLE)
00034     return ACE_OS::shutdown (this->get_handle (), ACE_SHUTDOWN_READ);
00035   else
00036     return 0;
00037 }

int ACE_SOCK_SEQPACK_Association::close_writer ( void   ) 

Close down the writer.

Definition at line 42 of file SOCK_SEQPACK_Association.inl.

00043 {
00044   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::close_writer");
00045   if (this->get_handle () != ACE_INVALID_HANDLE)
00046     return ACE_OS::shutdown (this->get_handle (), ACE_SHUTDOWN_WRITE);
00047   else
00048     return 0;
00049 }

void ACE_SOCK_SEQPACK_Association::dump ( void   )  const

Dump the state of an object.

Reimplemented from ACE_SOCK_IO.

Definition at line 21 of file SOCK_SEQPACK_Association.cpp.

00022 {
00023 #if defined (ACE_HAS_DUMP)
00024   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::dump");
00025 #endif /* ACE_HAS_DUMP */
00026 }

int ACE_SOCK_SEQPACK_Association::get_local_addrs ( ACE_INET_Addr addrs,
size_t &  size 
) const

Return local endpoint addresses in the referenced array of ACE_INET_Addr, which should have the specified size. If the number of local endpoint addresses is less than size, then size will be set to this number. If successful, the method returns 0, otherwise returns -1.

Definition at line 72 of file SOCK_SEQPACK_Association.cpp.

00073 {
00074   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::get_local_addrs");
00075 
00076 #if defined (ACE_HAS_LKSCTP)
00077   /*
00078     The size of ACE_INET_Addr must be large enough to hold the number of
00079     local addresses on the machine.  If the array is too small, the function
00080     will only return the number of addresses that will fit.  If the array is
00081     too large, the 'size' parameter will be modified to indicate the number
00082     of addrs.
00083 
00084     We will call sctp_getladdrs() which accepts 3 parameters
00085     1. a socket fd
00086     2. a sctp association_id which will be ignored since we are using
00087        tcp sockets
00088     3. a pointer to sockaddr
00089 
00090     lksctp/draft will allocate memory and we are responsible for freeing
00091     it by calling sctp_freeladdrs().
00092   */
00093 
00094   sockaddr_in *si = 0;
00095   sockaddr *laddrs = 0;
00096   int err = 0;
00097   size_t len = 0;
00098 
00099 #ifndef ACE_HAS_VOID_PTR_SCTP_GETLADDRS
00100   err = sctp_getladdrs(this->get_handle(), 0, &laddrs);
00101 #else
00102   err = sctp_getladdrs(this->get_handle(), 0, reinterpret_cast<void**>(&laddrs));
00103 #endif /* ACE_HAS_VOID_PTR_SCTP_GETPADDRS */
00104   if (err > 0)
00105   {
00106     len = err;
00107     // check to see if we have more addresses than we have
00108     // space in our ACE_INET_Addr array
00109     if (len > size)
00110     {
00111       // since our array is too small, we will only copy the first
00112       // few that fit
00113       len = size;
00114     }
00115 
00116     for (size_t i = 0; i < len; i++)
00117     {
00118       // first we cast the sockaddr to sockaddr_in
00119       // since we only support ipv4 at this time.
00120       si = (sockaddr_in *) (&(laddrs[i]));
00121 
00122       // now we fillup the ace_inet_addr array
00123       addrs[i].set_addr(si, sizeof(sockaddr_in));
00124       addrs[i].set_type(si->sin_family);
00125       addrs[i].set_size(sizeof(sockaddr_in));
00126     }
00127   }
00128   else /* err < 0 */
00129   {
00130     // sctp_getladdrs will return -1 on error
00131     return -1;
00132   }
00133 
00134   // indicate the num of addrs returned to the calling function
00135   size = len;
00136 
00137   // make sure we free the struct using the system function
00138   sctp_freeladdrs(laddrs);
00139 
00140 #else
00141 
00142   /*
00143     We will be calling ACE_OS::getsockname, which accepts (and
00144     potentially modifies) two reference parameters:
00145 
00146     1.  a sockaddr_in* that points to a buffer
00147     2.  an int* that points to the size of this buffer
00148 
00149     The OpenSS7 implementation of SCTP copies an array of ipv4
00150     sockaddr_in into the buffer.  Then, if the size of the buffer is
00151     greater than the size used, the size parameter is reduced
00152     accordingly.
00153 
00154   */
00155 
00156   // The array of sockaddr_in will be stored in an ACE_Auto_Array_Ptr,
00157   // which causes dynamically-allocated memory to be released as soon
00158   // as the ACE_Auto_Array_Ptr goes out of scope.
00159   ACE_Auto_Array_Ptr<sockaddr_in> addr_structs;
00160 
00161   // Allocate memory for this array.  Return -1 if the memory cannot
00162   // be allocated.  (This activity requires a temporary variable---a
00163   // bare sockaddr_in* --- because ACE_NEW_RETURN cannot act directory on
00164   // an ACE_Auto_Array_Ptr.)
00165   {
00166     sockaddr_in *addr_structs_bootstrap = 0;
00167     ACE_NEW_RETURN (addr_structs_bootstrap, sockaddr_in[size], -1);
00168     addr_structs.reset(addr_structs_bootstrap);
00169   }
00170 
00171   // Physical size of this array is its logical size multiplied by
00172   // the physical size of one of its elements.
00173   size_t physical_size = size * sizeof(sockaddr_in);
00174 
00175   /* Clear the array */
00176   ACE_OS::memset(addr_structs.get(),
00177                  0,
00178                  physical_size);
00179 
00180   /*
00181   ** Populate the array with real values from the getsockname system
00182   ** call.  addr_structs is modified, and name_size is modified to contain
00183   ** the number of bytes written to addr_structs.
00184   ** Use name_size to get the data types right across the call.
00185   */
00186   int name_size = static_cast<int> (physical_size);
00187   if (ACE_OS::getsockname (this->get_handle (),
00188                            reinterpret_cast<sockaddr *> (addr_structs.get()),
00189                            &name_size) == -1)
00190     return -1;
00191 
00192   /* Calculate the NEW physical size of the array */
00193   name_size /= sizeof (sockaddr_in);
00194   size = static_cast<size_t> (name_size);
00195 
00196   /* Copy each sockaddr_in to the address structure of an ACE_Addr from
00197      the passed-in array */
00198   const int addrlen (static_cast<int> (sizeof (sockaddr_in)));
00199   for (int i = 0; i < name_size; ++i)
00200     {
00201       addrs[i].set_addr (&(addr_structs[i]), addrlen);
00202       addrs[i].set_type (addr_structs[i].sin_family);
00203       addrs[i].set_size (addrlen);
00204     }
00205 #endif /* ACE_HAS_LKSCTP */
00206   return 0;
00207 }

int ACE_SOCK_SEQPACK_Association::get_remote_addrs ( ACE_INET_Addr addrs,
size_t &  size 
) const

Return remote endpoint addresses in the referenced array of ACE_INET_Addr, which should have the specified size. If the number of remote endpoint addresses is less than size, then size will be set to this number. If successful, the method returns 0, otherwise returns -1.

Definition at line 211 of file SOCK_SEQPACK_Association.cpp.

00212 {
00213   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::get_remote_addrs");
00214 #if defined (ACE_HAS_LKSCTP)
00215   /*
00216     The size of ACE_INET_Addr must be large enough to hold the number of
00217     remotes addresses in the association.  If the array is too small, the
00218     function will only return the number of addresses that will fit.  If the
00219     array is too large, the 'size' parameter will be modified to indicate
00220     the number of addrs.
00221 
00222     We will call sctp_getpaddrs() which accepts 3 parameters
00223     1. a socket fd
00224     2. a sctp association_id which will be ignored since we are using
00225        tcp sockets
00226     3. a pointer to a sockaddr
00227 
00228     lksctp/draft will allocate memory and we are responsible for freeing
00229     it by calling sctp_freepaddrs().
00230   */
00231 
00232   sockaddr_in *si = 0;
00233   sockaddr *paddrs = 0;
00234   int err = 0;
00235   size_t len = 0;
00236 
00237 #ifndef ACE_HAS_VOID_PTR_SCTP_GETPADDRS
00238   err = sctp_getpaddrs(this->get_handle(), 0, &paddrs);
00239 #else
00240   err = sctp_getpaddrs(this->get_handle(), 0, reinterpret_cast<void**>(&paddrs));
00241 #endif /* ACE_HAS_VOID_PTR_SCTP_GETPADDRS */
00242 
00243   if (err > 0)
00244   {
00245     len = err;
00246     // check to see if we have more addresses than we have
00247     // space in our ACE_INET_Addr array
00248     if (len > size)
00249     {
00250       // since our array is too small, we will only copy the first
00251       // few that fit
00252       len = size;
00253     }
00254 
00255     for (size_t i = 0; i < len; i++)
00256     {
00257       // first we cast the sockaddr to sockaddr_in
00258       // since we only support ipv4 at this time.
00259       si = (sockaddr_in *) (&(paddrs[i]));
00260 
00261       // now we fillup the ace_inet_addr array
00262       addrs[i].set_addr(si, sizeof(sockaddr_in));
00263       addrs[i].set_type(si->sin_family);
00264       addrs[i].set_size(sizeof(sockaddr_in));
00265     }
00266   }
00267   else /* err < 0 */
00268   {
00269     // sctp_getpaddrs will return -1 on error
00270     return -1;
00271   }
00272 
00273   // indicate the num of addrs returned to the calling function
00274   size = len;
00275 
00276   // make sure we free the struct using the system function
00277   sctp_freepaddrs(paddrs);
00278 
00279 #else
00280 
00281   /*
00282     We will be calling ACE_OS::getpeername, which accepts (and
00283     potentially modifies) two reference parameters:
00284 
00285     1.  a sockaddr_in* that points to a buffer
00286     2.  an int* that points to the size of this buffer
00287 
00288     The OpenSS7 implementation of SCTP copies an array of ipv4
00289     sockaddr_in into the buffer.  Then, if the size of the buffer is
00290     greater than the size used, the size parameter is reduced
00291     accordingly.
00292 
00293   */
00294 
00295   // The array of sockaddr_in will be stored in an ACE_Auto_Array_Ptr,
00296   // which causes dynamically-allocated memory to be released as soon
00297   // as the ACE_Auto_Array_Ptr goes out of scope.
00298   ACE_Auto_Array_Ptr<sockaddr_in> addr_structs;
00299 
00300   // Allocate memory for this array.  Return -1 if the memory cannot
00301   // be allocated.  (This activity requires a temporary variable---a
00302   // bare sockaddr_in* --- because ACE_NEW_RETURN cannot act directory on
00303   // an ACE_Auto_Array_Ptr.)
00304   {
00305     sockaddr_in *addr_structs_bootstrap = 0;
00306     ACE_NEW_RETURN (addr_structs_bootstrap, sockaddr_in[size], -1);
00307     addr_structs.reset(addr_structs_bootstrap);
00308   }
00309 
00310   // Physical size of this array is its logical size multiplied by
00311   // the physical size of one of its elements.
00312   size_t physical_size = size * sizeof(sockaddr_in);
00313 
00314   /* Clear the array */
00315   ACE_OS::memset(addr_structs.get(),
00316                  0,
00317                  physical_size);
00318 
00319   /*
00320   ** Populate the array with real values from the getpeername system
00321   ** call.  addr_structs is modified, and name_size is modified to contain
00322   ** the number of bytes written to addr_structs.
00323   ** Use name_size to get the data types right across the call.
00324   */
00325   int name_size = static_cast<int> (physical_size);
00326   if (ACE_OS::getpeername (this->get_handle (),
00327                            reinterpret_cast<sockaddr *> (addr_structs.get()),
00328                            &name_size) == -1)
00329     return -1;
00330 
00331   /* Calculate the NEW physical size of the array */
00332   name_size /= sizeof (sockaddr_in);
00333   size = static_cast<size_t> (name_size);
00334 
00335   /* Copy each sockaddr_in to the address structure of an ACE_Addr from
00336      the passed-in array */
00337   const int addrlen (static_cast<int> (sizeof (sockaddr_in)));
00338   for (int i = 0; i < name_size; ++i)
00339     {
00340       addrs[i].set_addr (&(addr_structs[i]), addrlen);
00341       addrs[i].set_type (addr_structs[i].sin_family);
00342       addrs[i].set_size (addrlen);
00343     }
00344 #endif /* ACE_HAS_LKSCTP */
00345   return 0;
00346 }

ssize_t ACE_SOCK_SEQPACK_Association::recv_n ( void *  buf,
size_t  len,
const ACE_Time_Value timeout = 0,
size_t *  bytes_transferred = 0 
) const

Try to recv exactly len bytes into buf from the connected socket.

Definition at line 68 of file SOCK_SEQPACK_Association.inl.

00072 {
00073   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::recv_n");
00074   return ACE::recv_n (this->get_handle (),
00075                       buf,
00076                       len,
00077                       timeout,
00078                       bytes_transferred);
00079 }

ssize_t ACE_SOCK_SEQPACK_Association::recv_n ( void *  buf,
size_t  len,
int  flags,
const ACE_Time_Value timeout = 0,
size_t *  bytes_transferred = 0 
) const

Try to recv exactly len bytes into buf from the connected socket.

Definition at line 52 of file SOCK_SEQPACK_Association.inl.

00057 {
00058   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::recv_n");
00059   return ACE::recv_n (this->get_handle (),
00060                       buf,
00061                       len,
00062                       flags,
00063                       timeout,
00064                       bytes_transferred);
00065 }

ssize_t ACE_SOCK_SEQPACK_Association::recv_urg ( void *  ptr,
size_t  len = sizeof (char),
const ACE_Time_Value timeout = 0 
) const

Definition at line 165 of file SOCK_SEQPACK_Association.inl.

00168 {
00169   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::recv_urg");
00170   return ACE::recv (this->get_handle (),
00171                     ptr,
00172                     len,
00173                     MSG_OOB,
00174                     timeout);
00175 }

ssize_t ACE_SOCK_SEQPACK_Association::recvv_n ( iovec  iov[],
int  iovcnt,
const ACE_Time_Value timeout = 0,
size_t *  bytes_transferred = 0 
) const

Receive an <iovec> of size <iovcnt> from the connected socket.

Definition at line 82 of file SOCK_SEQPACK_Association.inl.

00086 {
00087   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::recvv_n");
00088   return ACE::recvv_n (this->get_handle (),
00089                        iov,
00090                        n,
00091                        timeout,
00092                        bytes_transferred);
00093 }

ssize_t ACE_SOCK_SEQPACK_Association::send_n ( const ACE_Message_Block message_block,
const ACE_Time_Value timeout = 0,
size_t *  bytes_transferred = 0 
) const

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.

Definition at line 140 of file SOCK_SEQPACK_Association.inl.

00143 {
00144   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::send_n");
00145   return ACE::send_n (this->get_handle (),
00146                       message_block,
00147                       timeout,
00148                       bytes_transferred);
00149 }

ssize_t ACE_SOCK_SEQPACK_Association::send_n ( const void *  buf,
size_t  len,
const ACE_Time_Value timeout = 0,
size_t *  bytes_transferred = 0 
) const

Try to send exactly len bytes from buf to the connected socket.

Definition at line 112 of file SOCK_SEQPACK_Association.inl.

00116 {
00117   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::send_n");
00118   return ACE::send_n (this->get_handle (),
00119                       buf,
00120                       len,
00121                       timeout,
00122                       bytes_transferred);
00123 }

ssize_t ACE_SOCK_SEQPACK_Association::send_n ( const void *  buf,
size_t  len,
int  flags,
const ACE_Time_Value timeout = 0,
size_t *  bytes_transferred = 0 
) const

Try to send exactly len bytes from buf to the connection socket.

Definition at line 96 of file SOCK_SEQPACK_Association.inl.

00101 {
00102   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::send_n");
00103   return ACE::send_n (this->get_handle (),
00104                       buf,
00105                       len,
00106                       flags,
00107                       timeout,
00108                       bytes_transferred);
00109 }

ssize_t ACE_SOCK_SEQPACK_Association::send_urg ( const void *  ptr,
size_t  len = sizeof (char),
const ACE_Time_Value timeout = 0 
) const

Definition at line 152 of file SOCK_SEQPACK_Association.inl.

00155 {
00156   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::send_urg");
00157   return ACE::send (this->get_handle (),
00158                     ptr,
00159                     len,
00160                     MSG_OOB,
00161                     timeout);
00162 }

ssize_t ACE_SOCK_SEQPACK_Association::sendv_n ( const iovec  iov[],
int  iovcnt,
const ACE_Time_Value timeout = 0,
size_t *  bytes_transferred = 0 
) const

Send an <iovec> of size <iovcnt> to the connected socket.

Definition at line 126 of file SOCK_SEQPACK_Association.inl.

00130 {
00131   ACE_TRACE ("ACE_SOCK_SEQPACK_Association::sendv_n");
00132   return ACE::sendv_n (this->get_handle (),
00133                        iov,
00134                        n,
00135                        timeout,
00136                        bytes_transferred);
00137 }


Member Data Documentation

Declare the dynamic allocation hooks.

Reimplemented from ACE_SOCK_IO.

Definition at line 191 of file SOCK_SEQPACK_Association.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on Sun Nov 22 23:16:26 2009 for ACE by  doxygen 1.6.1