#include <ATM_Acceptor.h>
Public Types | |
| typedef ACE_ATM_Addr | PEER_ADDR |
| typedef ACE_ATM_Stream | PEER_STREAM |
Public Member Functions | |
| ACE_ATM_Acceptor (void) | |
| Default constructor. | |
| ~ACE_ATM_Acceptor () | |
| ACE_ATM_Acceptor (const ACE_Addr &remote_sap, int backlog=ACE_DEFAULT_BACKLOG, ACE_ATM_Params params=ACE_ATM_Params()) | |
| Initiate a passive mode connection. | |
| ACE_HANDLE | open (const ACE_Addr &remote_sap, int backlog=ACE_DEFAULT_BACKLOG, ACE_ATM_Params params=ACE_ATM_Params()) |
| Initiate a passive mode socket. | |
| int | close (void) |
| Close down the acceptor and release resources. | |
| int | accept (ACE_ATM_Stream &new_sap, ACE_Addr *remote_addr=0, ACE_Time_Value *timeout=0, int restart=1, int reset_new_handle=0, ACE_ATM_Params params=ACE_ATM_Params(), ACE_ATM_QoS qos=ACE_ATM_QoS()) |
| int | get_local_addr (ACE_ATM_Addr &local_addr) |
| Get the local address currently listening on. | |
| void | dump (void) const |
| Dump the state of an object. | |
Public Attributes | |
| ACE_ALLOC_HOOK_DECLARE | |
| Declare the dynamic allocation hooks. | |
Private Attributes | |
| ATM_Acceptor | acceptor_ |
This class wraps up the ACE_SOCK_Acceptor and ACE_TLI_Acceptor to make the mechanism for the ATM protocol transparent.
Definition at line 60 of file ATM_Acceptor.h.
|
|
Definition at line 100 of file ATM_Acceptor.h. |
|
|
Definition at line 101 of file ATM_Acceptor.h. |
|
|
Default constructor.
Definition at line 26 of file ATM_Acceptor.cpp. References ACE_TRACE.
00027 {
00028 ACE_TRACE ("ACE_ATM_Acceptor::ACE_ATM_Acceptor");
00029 }
|
|
|
Definition at line 31 of file ATM_Acceptor.cpp. References ACE_TRACE.
00032 {
00033 ACE_TRACE ("ACE_ATM_Acceptor::~ACE_ATM_Acceptor");
00034 }
|
|
||||||||||||||||
|
Initiate a passive mode connection.
Definition at line 17 of file ATM_Acceptor.inl. References ACE_ERROR, ACE_LIB_TEXT, ACE_TRACE, LM_ERROR, and open().
|
|
||||||||||||||||||||||||||||||||
|
Accept a new data transfer connection. A timeout of 0 means block forever, a timeout of {0, 0} means poll. restart == 1 means "restart if interrupted." Definition at line 236 of file ATM_Acceptor.cpp. References ACE_OS::accept(), acceptor_, ACE_TRACE, ATM_QoS, ACE_ATM_QoS::get_qos(), ACE_ATM_Params::get_rw_flag(), ACE_ATM_Stream::get_stream(), ACE_ATM_Params::get_user_data(), ACE_OS::printf(), and ACE_OS::setsockopt().
00243 {
00244 ACE_TRACE ("ACE_ATM_Acceptor::accept");
00245 #if defined (ACE_HAS_FORE_ATM_XTI)
00246 ATM_QoS optbuf = qos.get_qos ();
00247
00248 return (acceptor_.accept (new_sap.get_stream (),
00249 remote_addr,
00250 timeout,
00251 restart,
00252 reset_new_handle,
00253 params.get_rw_flag (),
00254 params.get_user_data (),
00255 &optbuf));
00256 #elif defined (ACE_HAS_FORE_ATM_WS2)
00257 ACE_HANDLE n_handle;
00258 ACE_HANDLE s_handle = ((ACE_SOCK_Acceptor *) this) -> get_handle ();
00259 struct sockaddr_atm *cli_addr
00260 = (struct sockaddr_atm *)remote_addr -> get_addr ();
00261 int caddr_len = sizeof (struct sockaddr_atm);
00262
00263 do {
00264 n_handle = ACE_OS::accept (s_handle,
00265 reinterpret_cast<struct sockaddr *> (cli_addr),
00266 &caddr_len);
00267 } while (n_handle == ACE_INVALID_HANDLE && errno == EINTR);
00268
00269 ((ACE_ATM_Addr *)remote_addr) -> set (cli_addr,
00270 ((ACE_ATM_Addr *)remote_addr) -> get_selector ());
00271 ((ACE_IPC_SAP *)&new_sap) -> set_handle (n_handle);
00272
00273 return 0;
00274 #elif defined (ACE_HAS_LINUX_ATM)
00275 ACE_UNUSED_ARG (params);
00276
00277 ACE_HANDLE s_handle = ((ACE_SOCK_Acceptor *) this) -> get_handle ();
00278 struct atm_qos accept_qos = qos.get_qos ();
00279
00280 if (ACE_OS::setsockopt (s_handle,
00281 SOL_ATM,
00282 SO_ATMQOS,
00283 reinterpret_cast<char*> (&accept_qos),
00284 sizeof (accept_qos)) < 0) {
00285 ACE_OS::printf ("Acceptor (accept): error setting Qos");
00286 }
00287
00288 return (acceptor_.accept (new_sap.get_stream (),
00289 remote_addr,
00290 timeout,
00291 restart,
00292 reset_new_handle));
00293 #else
00294 ACE_UNUSED_ARG (new_sap);
00295 ACE_UNUSED_ARG (remote_addr);
00296 ACE_UNUSED_ARG (timeout);
00297 ACE_UNUSED_ARG (restart);
00298 ACE_UNUSED_ARG (reset_new_handle);
00299 ACE_UNUSED_ARG (params);
00300 ACE_UNUSED_ARG (qos);
00301 return (0);
00302 #endif /* ACE_HAS_FORE_ATM_XTI */
00303 }
|
|
|
Close down the acceptor and release resources.
Definition at line 32 of file ATM_Acceptor.inl. References acceptor_.
00033 {
00034 #if defined (ACE_HAS_FORE_ATM_XTI) || defined (ACE_HAS_FORE_ATM_WS2) || defined (ACE_HAS_LINUX_ATM)
00035 return (acceptor_.close());
00036 #else
00037 return 0;
00038 #endif // ACE_HAS_FORE_ATM_XTI || ACE_HAS_FORE_ATM_WS2 || ACE_HAS_LINUX_ATM
00039 }
|
|
|
Dump the state of an object.
Definition at line 9 of file ATM_Acceptor.inl. References ACE_TRACE.
00010 {
00011 #if defined (ACE_HAS_DUMP)
00012 ACE_TRACE ("ACE_ATM_Acceptor::dump");
00013 #endif /* ACE_HAS_DUMP */
00014 }
|
|
|
Get the local address currently listening on.
Definition at line 37 of file ATM_Acceptor.cpp. References acceptor_, ACE_DEBUG, ACE_LIB_TEXT, ACE_TRACE, ATM_Addr, ACE_ATM_Addr::get_addr(), ACE_OS::getsockname(), LM_DEBUG, ACE_OS::memcpy(), and ACE_OS::printf().
00038 {
00039 ACE_TRACE ("ACE_ATM_Acceptor::get_local_addr");
00040
00041 #if defined (ACE_HAS_FORE_ATM_WS2)
00042 unsigned long ret = 0;
00043 DWORD deviceID = 0;
00044 ATM_ADDRESS addr;
00045 struct sockaddr_atm *laddr;
00046
00047 if (::WSAIoctl ((int) ((ACE_SOCK_Acceptor *)this) -> get_handle (),
00048 SIO_GET_ATM_ADDRESS,
00049 (LPVOID) &deviceID,
00050 sizeof (DWORD),
00051 (LPVOID)&addr,
00052 sizeof (ATM_ADDRESS),
00053 &ret,
00054 0,
00055 0) == SOCKET_ERROR) {
00056 ACE_OS::printf ("ATM_Acceptor (get_local_addr): WSIoctl: %d\n",
00057 ::WSAGetLastError ());
00058 return -1;
00059 }
00060
00061 laddr = (struct sockaddr_atm *)local_addr.get_addr ();
00062 ACE_OS::memcpy ((void *)& (laddr -> satm_number),
00063 (void *)&addr,
00064 ATM_ADDR_SIZE - 1);
00065
00066 return 0;
00067 #elif defined (ACE_HAS_FORE_ATM_XTI)
00068 ACE_UNUSED_ARG (local_addr);
00069
00070 return 0;
00071 #elif defined (ACE_HAS_LINUX_ATM)
00072 ATM_Addr *myaddr = (ATM_Addr *)local_addr.get_addr ();
00073 int addrlen = sizeof (myaddr->sockaddratmsvc);
00074
00075 if (ACE_OS::getsockname (acceptor_.get_handle (),
00076 (struct sockaddr *) & (myaddr->sockaddratmsvc),
00077 &addrlen) < 0) {
00078 ACE_DEBUG ((LM_DEBUG,
00079 ACE_LIB_TEXT ("ATM_Acceptor (get_local_addr): ioctl: %d\n"),
00080 errno));
00081 return -1;
00082 }
00083
00084 return (0);
00085 #else
00086 ACE_UNUSED_ARG (local_addr);
00087
00088 return 0;
00089 #endif /* ACE_HAS_FORE_ATM_WS2 && ACE_HAS_FORE_ATM_XTI */
00090 }
|
|
||||||||||||||||
|
Initiate a passive mode socket.
Definition at line 93 of file ATM_Acceptor.cpp. References acceptor_, ACE_DEBUG, ACE_FLAG_MULTIPOINT_C_LEAF, ACE_FLAG_MULTIPOINT_D_LEAF, ACE_LIB_TEXT, ACE_TRACE, ATM_Addr, ATM_QoS, ACE_OS::bind(), ACE_ATM_Addr::get_addr(), ACE_ATM_Params::get_device(), ACE_ATM_Params::get_flags(), ACE_ATM_Params::get_info(), ACE_ATM_Params::get_oflag(), ACE_ATM_Params::get_protocol(), ACE_ATM_Params::get_protocol_family(), ACE_ATM_Params::get_protocol_info(), ACE_ATM_QoS::get_qos(), ACE_ATM_Params::get_reuse_addr(), ACE_ATM_Params::get_sock_group(), ACE_ATM_Params::get_type(), ACE_OS::ioctl(), ACE_OS::listen(), LM_DEBUG, ACE_OS::memset(), ACE_OS::perror(), ACE_OS::printf(), ACE_ATM_Addr::set_selector(), ACE_OS::setsockopt(), and ACE_OS::socket(). Referenced by ACE_ATM_Acceptor().
00096 {
00097 ACE_TRACE ("ACE_ATM_Acceptor::open");
00098 #if defined (ACE_HAS_FORE_ATM_XTI)
00099 ACE_HANDLE handle = acceptor_.open (remote_sap,
00100 params.get_reuse_addr (),
00101 params.get_oflag (),
00102 params.get_info (),
00103 backlog,
00104 params.get_device ());
00105 return (handle == ACE_INVALID_HANDLE ? -1 : 0);
00106 #elif defined (ACE_HAS_FORE_ATM_WS2)
00107 struct sockaddr_atm local_atm_addr;
00108 ACE_HANDLE ret;
00109 DWORD flags = 0;
00110
00111 /* Create a local endpoint of communication */
00112
00113 // Only leaves can listen.
00114 flags = ACE_FLAG_MULTIPOINT_C_LEAF | ACE_FLAG_MULTIPOINT_D_LEAF;
00115
00116 if ((ret = ACE_OS::socket (AF_ATM,
00117 SOCK_RAW,
00118 ATMPROTO_AAL5,
00119 0,
00120 0,
00121 flags))
00122 == ACE_INVALID_HANDLE) {
00123 ACE_OS::printf ("Acceptor (open): socket %d\n",
00124 ::WSAGetLastError ());
00125 return (ret);
00126 }
00127
00128 ((ACE_SOCK_Acceptor *)this) -> set_handle (ret);
00129
00130 /* Set up the address information to become a server */
00131 ACE_OS::memset ((void *) &local_atm_addr, 0, sizeof local_atm_addr);
00132 local_atm_addr.satm_family = AF_ATM;
00133 local_atm_addr.satm_number.AddressType = SAP_FIELD_ANY_AESA_REST;
00134 local_atm_addr.satm_number.Addr[ ATM_ADDR_SIZE - 1 ]
00135 = ((ACE_ATM_Addr *)&remote_sap) -> get_selector ();
00136 local_atm_addr.satm_blli.Layer2Protocol = SAP_FIELD_ANY;
00137 local_atm_addr.satm_blli.Layer3Protocol = SAP_FIELD_ABSENT;
00138 local_atm_addr.satm_bhli.HighLayerInfoType = SAP_FIELD_ABSENT;
00139
00140 /* Associate address with endpoint */
00141 if (ACE_OS::bind (((ACE_SOCK_Acceptor *)this) -> get_handle (),
00142 reinterpret_cast<struct sockaddr *> (&local_atm_addr),
00143 sizeof local_atm_addr) == -1) {
00144 ACE_OS::printf ("Acceptor (open): bind %d\n", ::WSAGetLastError ());
00145 return (ACE_INVALID_HANDLE);
00146 }
00147
00148 /* Make endpoint listen for service requests */
00149 if (ACE_OS::listen (( (ACE_SOCK_Acceptor *)this) -> get_handle (),
00150 backlog)
00151 == -1) {
00152 ACE_OS::printf ("Acceptor (open): listen %d\n", ::WSAGetLastError ());
00153 return (ACE_INVALID_HANDLE);
00154 }
00155
00156 return 0;
00157 #elif defined (ACE_HAS_LINUX_ATM)
00158 //we need to set the qos before binding to the socket
00159 //use remote_sap as local_sap
00160
00161 ACE_ATM_Addr local_sap;
00162 ATM_Addr *local_sap_addr = (ATM_Addr*)local_sap.get_addr ();
00163 ACE_ATM_QoS def_qos;
00164 ATM_QoS qos = def_qos.get_qos ();
00165
00166 ACE_HANDLE handle;
00167 if ((handle = ACE_OS::socket (params.get_protocol_family (),
00168 params.get_type (),
00169 params.get_protocol (),
00170 params.get_protocol_info (),
00171 params.get_sock_group (),
00172 params.get_flags ()
00173 ))
00174 == ACE_INVALID_HANDLE) {
00175 ACE_DEBUG (LM_DEBUG,
00176 ACE_LIB_TEXT ("Acceptor (socket): socket %d\n"),
00177 errno);
00178 return (ACE_INVALID_HANDLE);
00179 }
00180
00181 ((ACE_SOCK_Acceptor *)this) -> set_handle (handle);
00182 if (ACE_OS::setsockopt (handle,
00183 SOL_ATM,
00184 SO_ATMQOS,
00185 reinterpret_cast<char*> (&qos),
00186 sizeof (qos)) < 0) {
00187 ACE_OS::printf ("Acceptor (setsockopt): setsockopt:%d\n",
00188 errno);
00189 }
00190
00191 struct atmif_sioc req;
00192 struct sockaddr_atmsvc aux_addr[1024];
00193
00194 req.number = 0;
00195 req.arg = aux_addr;
00196 req.length = sizeof (aux_addr);
00197 if (ACE_OS::ioctl (handle,
00198 ATM_GETADDR,
00199 &req) < 0) {
00200 ACE_OS::perror ("Acceptor (setsockopt): ioctl:");
00201 }
00202 else {
00203 local_sap_addr->sockaddratmsvc = aux_addr[0];
00204 }
00205 local_sap.set_selector (( (ACE_ATM_Addr*)&remote_sap)->get_selector ());
00206
00207 if (ACE_OS::bind (handle,
00208 reinterpret_cast<struct sockaddr *> (
00209 &(local_sap_addr->sockaddratmsvc)),
00210 sizeof (local_sap_addr->sockaddratmsvc)
00211 ) == -1) {
00212 ACE_DEBUG (LM_DEBUG,
00213 ACE_LIB_TEXT ("Acceptor (open): bind %d\n"),
00214 errno);
00215 return -1;
00216 }
00217 // Make endpoint listen for service requests
00218 if (ACE_OS::listen (handle,
00219 backlog)
00220 == -1) {
00221 ACE_DEBUG (LM_DEBUG,
00222 ACE_LIB_TEXT ("Acceptor (listen): listen %d\n"),
00223 errno);
00224 return -1;
00225 }
00226
00227 return 0;
00228 #else
00229 ACE_UNUSED_ARG (remote_sap);
00230 ACE_UNUSED_ARG (backlog);
00231 ACE_UNUSED_ARG (params);
00232 #endif /* ACE_HAS_FORE_ATM_XTI/ACE_HAS_FORE_ATM_WS2/ACE_HAS_LINUX_ATM */
00233 }
|
|
|
Definition at line 110 of file ATM_Acceptor.h. Referenced by accept(), close(), get_local_addr(), and open(). |
|
|
Declare the dynamic allocation hooks.
Definition at line 107 of file ATM_Acceptor.h. |
1.3.6