SOCK_Dgram.inl

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // SOCK_Dgram.inl,v 4.2 2005/10/28 16:14:55 ossama Exp
00004 
00005 // SOCK_Dgram.i
00006 
00007 #include "ace/OS_NS_sys_socket.h"
00008 
00009 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00010 
00011 // Here's the simple-minded constructor.
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 // <sendto> an N byte datagram to <addr> (connectionless version).
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 // <recvfrom> an n byte datagram (connectionless version).
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 // <sendto> an N byte datagram to <addr> (connectionless version).
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);  // Betting on < 4G
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 // <recvfrom> an n byte datagram (connectionless version).
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);  // Betting on < 4G
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

Generated on Thu Nov 9 09:42:04 2006 for ACE by doxygen 1.3.6