summaryrefslogtreecommitdiff
path: root/ACE/ace/SOCK_Dgram.inl
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/SOCK_Dgram.inl')
-rw-r--r--ACE/ace/SOCK_Dgram.inl167
1 files changed, 167 insertions, 0 deletions
diff --git a/ACE/ace/SOCK_Dgram.inl b/ACE/ace/SOCK_Dgram.inl
new file mode 100644
index 00000000000..55343b13668
--- /dev/null
+++ b/ACE/ace/SOCK_Dgram.inl
@@ -0,0 +1,167 @@
+// -*- C++ -*-
+//
+// $Id$
+
+// SOCK_Dgram.i
+
+#include "ace/OS_NS_sys_socket.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+// Here's the simple-minded constructor.
+
+ACE_INLINE
+ACE_SOCK_Dgram::ACE_SOCK_Dgram (void)
+{
+ ACE_TRACE ("ACE_SOCK_Dgram::ACE_SOCK_Dgram");
+}
+
+ACE_INLINE
+ACE_SOCK_Dgram::~ACE_SOCK_Dgram (void)
+{
+ ACE_TRACE ("ACE_SOCK_Dgram::~ACE_SOCK_Dgram");
+}
+
+// <sendto> an N byte datagram to <addr> (connectionless version).
+
+ACE_INLINE ssize_t
+ACE_SOCK_Dgram::send (const void *buf,
+ size_t n,
+ const ACE_Addr &addr,
+ int flags) const
+{
+ ACE_TRACE ("ACE_SOCK_Dgram::send");
+ sockaddr *saddr = (sockaddr *) addr.get_addr ();
+ int len = addr.get_size ();
+ return ACE_OS::sendto (this->get_handle (),
+ (const char *) buf,
+ n,
+ flags,
+ (struct sockaddr *) saddr,
+ len);
+}
+
+// <recvfrom> an n byte datagram (connectionless version).
+
+ACE_INLINE ssize_t
+ACE_SOCK_Dgram::recv (void *buf,
+ size_t n,
+ ACE_Addr &addr,
+ int flags) const
+{
+ ACE_TRACE ("ACE_SOCK_Dgram::recv");
+ sockaddr *saddr = (sockaddr *) addr.get_addr ();
+ int addr_len = addr.get_size ();
+
+ ssize_t status = ACE_OS::recvfrom (this->get_handle (),
+ (char *) buf,
+ n,
+ flags,
+ (sockaddr *) saddr,
+ &addr_len);
+ addr.set_size (addr_len);
+ addr.set_type (reinterpret_cast<sockaddr_in *> (saddr)->sin_family);
+ return status;
+}
+
+ACE_INLINE ssize_t
+ACE_SOCK_Dgram::send (const iovec buffers[],
+ int buffer_count,
+ size_t &number_of_bytes_sent,
+ int flags,
+ const ACE_Addr &addr,
+ ACE_OVERLAPPED *overlapped,
+ ACE_OVERLAPPED_COMPLETION_FUNC func) const
+{
+ ACE_TRACE ("ACE_SOCK_Dgram::send");
+ sockaddr *saddr = (sockaddr *) addr.get_addr ();
+ int len = addr.get_size ();
+ return ACE_OS::sendto (this->get_handle (),
+ buffers,
+ buffer_count,
+ number_of_bytes_sent,
+ flags,
+ (const sockaddr *) saddr,
+ len,
+ overlapped,
+ func);
+}
+
+ACE_INLINE ssize_t
+ACE_SOCK_Dgram::recv (iovec buffers[],
+ int buffer_count,
+ size_t &number_of_bytes_recvd,
+ int &flags,
+ ACE_Addr &addr,
+ ACE_OVERLAPPED *overlapped,
+ ACE_OVERLAPPED_COMPLETION_FUNC func) const
+{
+ ACE_TRACE ("ACE_SOCK_Dgram::recv");
+ sockaddr *saddr = (sockaddr *) addr.get_addr ();
+ int addr_len = addr.get_size ();
+
+ ssize_t status = ACE_OS::recvfrom (this->get_handle (),
+ buffers,
+ buffer_count,
+ number_of_bytes_recvd,
+ flags,
+ (sockaddr *) saddr,
+ &addr_len,
+ overlapped,
+ func);
+ addr.set_size (addr_len);
+ addr.set_type (reinterpret_cast<sockaddr_in *> (saddr)->sin_family);
+ return status;
+}
+
+// <sendto> an N byte datagram to <addr> (connectionless version).
+
+ACE_INLINE ssize_t
+ACE_SOCK_Dgram::send (const void *buf,
+ size_t n,
+ const ACE_Addr &addr,
+ int flags,
+ ACE_OVERLAPPED *overlapped,
+ ACE_OVERLAPPED_COMPLETION_FUNC func) const
+{
+ ACE_TRACE ("ACE_SOCK_Dgram::send");
+
+ iovec buffer[1];
+ buffer[0].iov_len = static_cast<u_long> (n); // Betting on < 4G
+ buffer[0].iov_base = (char *) buf;
+ size_t number_of_bytes_sent = 0;
+ return this->send (buffer,
+ 1,
+ number_of_bytes_sent,
+ flags,
+ addr,
+ overlapped,
+ func);
+}
+
+// <recvfrom> an n byte datagram (connectionless version).
+
+ACE_INLINE ssize_t
+ACE_SOCK_Dgram::recv (void *buf,
+ size_t n,
+ ACE_Addr &addr,
+ int flags,
+ ACE_OVERLAPPED *overlapped,
+ ACE_OVERLAPPED_COMPLETION_FUNC func) const
+{
+ ACE_TRACE ("ACE_SOCK_Dgram::recv");
+
+ iovec buffer[1];
+ buffer[0].iov_len = static_cast<u_long> (n); // Betting on < 4G
+ buffer[0].iov_base = (char *) buf;
+ size_t number_of_bytes_recvd = 0;
+ return this->recv (buffer,
+ 1,
+ number_of_bytes_recvd,
+ flags,
+ addr,
+ overlapped,
+ func);
+}
+
+ACE_END_VERSIONED_NAMESPACE_DECL