00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ACE_SOCK_DGRAM_H
00012 #define ACE_SOCK_DGRAM_H
00013 #include "ace/pre.h"
00014
00015 #include "ace/SOCK.h"
00016 #include "ace/INET_Addr.h"
00017
00018 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00019 # pragma once
00020 #endif
00021
00022 #include "ace/Addr.h"
00023
00024 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00025
00026 class ACE_Time_Value;
00027
00028
00029
00030
00031
00032
00033
00034 class ACE_Export ACE_SOCK_Dgram : public ACE_SOCK
00035 {
00036 public:
00037
00038
00039 ACE_SOCK_Dgram (void);
00040
00041
00042
00043 ACE_SOCK_Dgram (const ACE_Addr &local,
00044 int protocol_family = ACE_PROTOCOL_FAMILY_INET,
00045 int protocol = 0,
00046 int reuse_addr = 0,
00047 int ipv6_only = 0);
00048
00049
00050
00051
00052
00053
00054 ACE_SOCK_Dgram (const ACE_Addr &local,
00055 int protocol_family,
00056 int protocol,
00057 ACE_Protocol_Info *protocolinfo,
00058 ACE_SOCK_GROUP g = 0,
00059 u_long flags = 0,
00060 int reuse_addr = 0,
00061 int ipv6_only = 0);
00062
00063
00064
00065 int open (const ACE_Addr &local,
00066 int protocol_family = ACE_PROTOCOL_FAMILY_INET,
00067 int protocol = 0,
00068 int reuse_addr = 0,
00069 int ipv6_only = 0);
00070
00071
00072
00073
00074
00075
00076 int open (const ACE_Addr &local,
00077 int protocol_family,
00078 int protocol,
00079 ACE_Protocol_Info *protocolinfo,
00080 ACE_SOCK_GROUP g = 0,
00081 u_long flags = 0,
00082 int reuse_addr = 0,
00083 int ipv6_only = 0);
00084
00085
00086 ~ACE_SOCK_Dgram (void);
00087
00088
00089
00090 ssize_t send (const void *buf,
00091 size_t n,
00092 const ACE_Addr &addr,
00093 int flags = 0) const;
00094
00095
00096
00097 ssize_t recv (void *buf,
00098 size_t n,
00099 ACE_Addr &addr,
00100 int flags = 0) const;
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110 ssize_t recv (iovec *io_vec,
00111 ACE_Addr &addr,
00112 int flags = 0,
00113 const ACE_Time_Value *timeout = 0) const;
00114
00115
00116
00117 ssize_t send (const iovec iov[],
00118 int n,
00119 const ACE_Addr &addr,
00120 int flags = 0) const;
00121
00122
00123
00124 ssize_t recv (iovec iov[],
00125 int n,
00126 ACE_Addr &addr,
00127 int flags = 0) const;
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138 ssize_t recv (void *buf,
00139 size_t n,
00140 ACE_Addr &addr,
00141 int flags,
00142 const ACE_Time_Value *timeout) const;
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153 ssize_t send (const void *buf,
00154 size_t n,
00155 const ACE_Addr &addr,
00156 int flags,
00157 const ACE_Time_Value *timeout) const;
00158
00159
00160
00161 ssize_t send (const iovec buffers[],
00162 int buffer_count,
00163 size_t &number_of_bytes_sent,
00164 int flags,
00165 const ACE_Addr &addr,
00166 ACE_OVERLAPPED *overlapped,
00167 ACE_OVERLAPPED_COMPLETION_FUNC func) const;
00168
00169
00170
00171 ssize_t recv (iovec buffers[],
00172 int buffer_count,
00173 size_t &number_of_bytes_recvd,
00174 int &flags,
00175 ACE_Addr &addr,
00176 ACE_OVERLAPPED *overlapped,
00177 ACE_OVERLAPPED_COMPLETION_FUNC func) const;
00178
00179
00180 ssize_t send (const void *buf,
00181 size_t n,
00182 const ACE_Addr &addr,
00183 int flags,
00184 ACE_OVERLAPPED *overlapped,
00185 ACE_OVERLAPPED_COMPLETION_FUNC func) const;
00186
00187
00188
00189 ssize_t recv (void *buf,
00190 size_t n,
00191 ACE_Addr &addr,
00192 int flags,
00193 ACE_OVERLAPPED *overlapped,
00194 ACE_OVERLAPPED_COMPLETION_FUNC func) const;
00195
00196
00197 typedef ACE_INET_Addr PEER_ADDR;
00198
00199
00200 void dump (void) const;
00201
00202
00203 int set_nic (const ACE_TCHAR *net_if,
00204 int addr_family = AF_UNSPEC);
00205
00206
00207 ACE_ALLOC_HOOK_DECLARE;
00208
00209 protected:
00210
00211 int shared_open (const ACE_Addr &local,
00212 int protocol_family,
00213 int ipv6_only = 0);
00214
00215
00216
00217 int make_multicast_ifaddr (ip_mreq *mreq,
00218 const ACE_INET_Addr &mcast_addr,
00219 const ACE_TCHAR *net_if);
00220
00221 #if defined (ACE_HAS_IPV6)
00222
00223
00224 int make_multicast_ifaddr6 (ipv6_mreq *mreq, // Put result here, if != NULL.
00225 const ACE_INET_Addr &mcast_addr,
00226 const ACE_TCHAR *net_if);
00227
00228 #endif
00229
00230 private:
00231
00232 int get_remote_addr (ACE_Addr &) const;
00233 };
00234
00235 ACE_END_VERSIONED_NAMESPACE_DECL
00236
00237 #if defined (__ACE_INLINE__)
00238 #include "ace/SOCK_Dgram.inl"
00239 #endif
00240
00241 #include "ace/post.h"
00242 #endif