00001
00002
00003
00004
00005
00006
00007 #include "ace/OS_NS_sys_socket.h"
00008
00009 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00010
00011
00012
00013 ACE_INLINE
00014 ACE_SOCK_Dgram::ACE_SOCK_Dgram (void)
00015 {
00016 ACE_TRACE ("ACE_SOCK_Dgram::ACE_SOCK_Dgram");
00017 }
00018
00019 ACE_INLINE
00020 ACE_SOCK_Dgram::~ACE_SOCK_Dgram (void)
00021 {
00022 ACE_TRACE ("ACE_SOCK_Dgram::~ACE_SOCK_Dgram");
00023 }
00024
00025
00026
00027 ACE_INLINE ssize_t
00028 ACE_SOCK_Dgram::send (const void *buf,
00029 size_t n,
00030 const ACE_Addr &addr,
00031 int flags) const
00032 {
00033 ACE_TRACE ("ACE_SOCK_Dgram::send");
00034 sockaddr *saddr = (sockaddr *) addr.get_addr ();
00035 int len = addr.get_size ();
00036 return ACE_OS::sendto (this->get_handle (),
00037 (const char *) buf,
00038 n,
00039 flags,
00040 (struct sockaddr *) saddr,
00041 len);
00042 }
00043
00044
00045
00046 ACE_INLINE ssize_t
00047 ACE_SOCK_Dgram::recv (void *buf,
00048 size_t n,
00049 ACE_Addr &addr,
00050 int flags) const
00051 {
00052 ACE_TRACE ("ACE_SOCK_Dgram::recv");
00053 sockaddr *saddr = (sockaddr *) addr.get_addr ();
00054 int addr_len = addr.get_size ();
00055
00056 ssize_t status = ACE_OS::recvfrom (this->get_handle (),
00057 (char *) buf,
00058 n,
00059 flags,
00060 (sockaddr *) saddr,
00061 &addr_len);
00062 addr.set_size (addr_len);
00063 addr.set_type (reinterpret_cast<sockaddr_in *> (saddr)->sin_family);
00064 return status;
00065 }
00066
00067 ACE_INLINE ssize_t
00068 ACE_SOCK_Dgram::send (const iovec buffers[],
00069 int buffer_count,
00070 size_t &number_of_bytes_sent,
00071 int flags,
00072 const ACE_Addr &addr,
00073 ACE_OVERLAPPED *overlapped,
00074 ACE_OVERLAPPED_COMPLETION_FUNC func) const
00075 {
00076 ACE_TRACE ("ACE_SOCK_Dgram::send");
00077 sockaddr *saddr = (sockaddr *) addr.get_addr ();
00078 int len = addr.get_size ();
00079 return ACE_OS::sendto (this->get_handle (),
00080 buffers,
00081 buffer_count,
00082 number_of_bytes_sent,
00083 flags,
00084 (const sockaddr *) saddr,
00085 len,
00086 overlapped,
00087 func);
00088 }
00089
00090 ACE_INLINE ssize_t
00091 ACE_SOCK_Dgram::recv (iovec buffers[],
00092 int buffer_count,
00093 size_t &number_of_bytes_recvd,
00094 int &flags,
00095 ACE_Addr &addr,
00096 ACE_OVERLAPPED *overlapped,
00097 ACE_OVERLAPPED_COMPLETION_FUNC func) const
00098 {
00099 ACE_TRACE ("ACE_SOCK_Dgram::recv");
00100 sockaddr *saddr = (sockaddr *) addr.get_addr ();
00101 int addr_len = addr.get_size ();
00102
00103 ssize_t status = ACE_OS::recvfrom (this->get_handle (),
00104 buffers,
00105 buffer_count,
00106 number_of_bytes_recvd,
00107 flags,
00108 (sockaddr *) saddr,
00109 &addr_len,
00110 overlapped,
00111 func);
00112 addr.set_size (addr_len);
00113 addr.set_type (reinterpret_cast<sockaddr_in *> (saddr)->sin_family);
00114 return status;
00115 }
00116
00117
00118
00119 ACE_INLINE ssize_t
00120 ACE_SOCK_Dgram::send (const void *buf,
00121 size_t n,
00122 const ACE_Addr &addr,
00123 int flags,
00124 ACE_OVERLAPPED *overlapped,
00125 ACE_OVERLAPPED_COMPLETION_FUNC func) const
00126 {
00127 ACE_TRACE ("ACE_SOCK_Dgram::send");
00128
00129 iovec buffer[1];
00130 buffer[0].iov_len = static_cast<u_long> (n);
00131 buffer[0].iov_base = (char *) buf;
00132 size_t number_of_bytes_sent = 0;
00133 return this->send (buffer,
00134 1,
00135 number_of_bytes_sent,
00136 flags,
00137 addr,
00138 overlapped,
00139 func);
00140 }
00141
00142
00143
00144 ACE_INLINE ssize_t
00145 ACE_SOCK_Dgram::recv (void *buf,
00146 size_t n,
00147 ACE_Addr &addr,
00148 int flags,
00149 ACE_OVERLAPPED *overlapped,
00150 ACE_OVERLAPPED_COMPLETION_FUNC func) const
00151 {
00152 ACE_TRACE ("ACE_SOCK_Dgram::recv");
00153
00154 iovec buffer[1];
00155 buffer[0].iov_len = static_cast<u_long> (n);
00156 buffer[0].iov_base = (char *) buf;
00157 size_t number_of_bytes_recvd = 0;
00158 return this->recv (buffer,
00159 1,
00160 number_of_bytes_recvd,
00161 flags,
00162 addr,
00163 overlapped,
00164 func);
00165 }
00166
00167 ACE_END_VERSIONED_NAMESPACE_DECL