Defines the methods in the ACE_SOCK_SEQPACK_Association abstraction. More...
#include <SOCK_SEQPACK_Association.h>


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. | |
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.
Definition at line 185 of file SOCK_SEQPACK_Association.h.
| ACE_SOCK_SEQPACK_Association::ACE_SOCK_SEQPACK_Association | ( | void | ) |
Constructor.
Definition at line 11 of file SOCK_SEQPACK_Association.inl.
| 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.
| 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 }
Declare the dynamic allocation hooks.
Reimplemented from ACE_SOCK_IO.
Definition at line 191 of file SOCK_SEQPACK_Association.h.
1.6.1