Public Member Functions | |
~Socket_Impl () | |
Socket_Impl (Address const &a, bool loop, Parameters const ¶ms) | |
void | send_ (void const *buf, size_t s) |
ssize_t | recv_ (void *buf, size_t s, ACE_Time_Value const *timeout, ACE_INET_Addr *from) |
ssize_t | size_ (ACE_Time_Value const *timeout) |
ACE_HANDLE | get_handle_ () |
Private Member Functions | |
virtual void | recv (Message_ptr m) |
Private Attributes | |
bool | loop_ |
Parameters const | params_ |
Mutex | mutex_ |
Condition | cond_ |
ACE_Unbounded_Queue< Message_ptr > | queue_ |
ACE_Pipe | signal_pipe_ |
ACE_Auto_Ptr< Fragment > | fragment_ |
ACE_Auto_Ptr< Reassemble > | reassemble_ |
ACE_Auto_Ptr< Acknowledge > | acknowledge_ |
ACE_Auto_Ptr< Retransmit > | retransmit_ |
ACE_Auto_Ptr< Flow > | flow_ |
ACE_Auto_Ptr< Link > | link_ |
|
Definition at line 120 of file Socket.cpp. References acknowledge_, ACE_Pipe::close(), flow_, fragment_, ACE_RMCast::In_Element::in_stop(), ACE_RMCast::Out_Element::out_stop(), ACE_Pipe::read_handle(), reassemble_, retransmit_, and signal_pipe_.
00121 { 00122 // Stop OUT stack from top to bottom. 00123 // 00124 out_stop (); 00125 fragment_->out_stop (); 00126 reassemble_->out_stop (); 00127 acknowledge_->out_stop (); 00128 retransmit_->out_stop (); 00129 flow_->out_stop (); 00130 link_->out_stop (); 00131 00132 // Stop IN stack from bottom up. 00133 // 00134 link_->in_stop (); 00135 flow_->in_stop (); 00136 retransmit_->in_stop (); 00137 acknowledge_->in_stop (); 00138 reassemble_->in_stop (); 00139 fragment_->in_stop (); 00140 in_stop (); 00141 00142 // Close signal pipe. 00143 // 00144 if (signal_pipe_.read_handle () != ACE_INVALID_HANDLE) 00145 signal_pipe_.close (); 00146 } |
|
Definition at line 86 of file Socket.cpp. References acknowledge_, ACE_RMCast::Address, flow_, fragment_, ACE_Auto_Basic_Ptr< X >::get(), ACE_RMCast::In_Element::in_start(), ACE_RMCast::Out_Element::out_start(), reassemble_, ACE_Auto_Basic_Ptr< X >::reset(), and retransmit_.
00087 : loop_ (loop), 00088 params_ (params), 00089 cond_ (mutex_) 00090 { 00091 fragment_.reset (new Fragment (params_)); 00092 reassemble_.reset (new Reassemble (params_)); 00093 acknowledge_.reset (new Acknowledge (params_)); 00094 retransmit_.reset (new Retransmit (params_)); 00095 flow_.reset (new Flow (params_)); 00096 link_.reset (new Link (a, params_)); 00097 00098 // Start IN stack from top to bottom. 00099 // 00100 in_start (0); 00101 fragment_->in_start (this); 00102 reassemble_->in_start (fragment_.get ()); 00103 acknowledge_->in_start (reassemble_.get ()); 00104 retransmit_->in_start (acknowledge_.get ()); 00105 flow_->in_start (retransmit_.get ()); 00106 link_->in_start (flow_.get ()); 00107 00108 // Start OUT stack from bottom up. 00109 // 00110 link_->out_start (0); 00111 flow_->out_start (link_.get ()); 00112 retransmit_->out_start (flow_.get ()); 00113 acknowledge_->out_start (retransmit_.get ()); 00114 reassemble_->out_start (acknowledge_.get ()); 00115 fragment_->out_start (reassemble_.get ()); 00116 out_start (fragment_.get ()); 00117 } |
|
Definition at line 280 of file Socket.cpp. References ACE_Pipe::open(), ACE_Pipe::read_handle(), and signal_pipe_.
00281 { 00282 if (signal_pipe_.read_handle () == ACE_INVALID_HANDLE) 00283 { 00284 signal_pipe_.open (); 00285 } 00286 00287 return signal_pipe_.read_handle (); 00288 } |
|
Reimplemented from ACE_RMCast::In_Element. Definition at line 291 of file Socket.cpp. References ACE_OS::abort(), ACE_RMCast::Address, ACE_Unbounded_Queue< Message_ptr >::enqueue_tail(), ACE_Unbounded_Queue< Message_ptr >::is_empty(), ACE_RMCast::Lock, loop_, ACE_RMCast::Message_ptr, ACE_Pipe::send(), ACE_Condition< MUTEX >::signal(), signal_pipe_, and ACE_Pipe::write_handle().
00292 { 00293 if (m->find (Data::id) != 0 || m->find (NoData::id) != 0) 00294 { 00295 if (!loop_) 00296 { 00297 Address to (static_cast<To const*> (m->find (To::id))->address ()); 00298 00299 Address from ( 00300 static_cast<From const*> (m->find (From::id))->address ()); 00301 00302 if (to == from) 00303 return; 00304 } 00305 00306 Lock l (mutex_); 00307 00308 //if (queue_.size () != 0) 00309 // cerr << "recv socket queue size: " << queue_.size () << endl; 00310 00311 //FUZZ: disable check_for_lack_ACE_OS 00312 bool signal (queue_.is_empty ()); 00313 //FUZZ: enable check_for_lack_ACE_OS 00314 00315 queue_.enqueue_tail (m); 00316 00317 if (signal) 00318 { 00319 // Also write to the pipe. 00320 if (signal_pipe_.write_handle () != ACE_INVALID_HANDLE) 00321 { 00322 char c; 00323 00324 if (signal_pipe_.send (&c, 1) != 1) 00325 { 00326 // perror ("write: "); 00327 ACE_OS::abort (); 00328 } 00329 } 00330 00331 cond_.signal (); 00332 } 00333 } 00334 } |
|
Definition at line 162 of file Socket.cpp. References ACE_OS::abort(), ACE_RMCast::Data::buf(), ACE_Unbounded_Queue< Message_ptr >::dequeue_head(), ACE_OS::gettimeofday(), ACE_Unbounded_Queue< Message_ptr >::is_empty(), ACE_RMCast::Lock, ACE_OS::memcpy(), ACE_RMCast::Message_ptr, ACE_OS::perror(), ACE_Pipe::read_handle(), ACE_Pipe::recv(), signal_pipe_, ACE_RMCast::Data::size(), ssize_t, and ACE_Condition< MUTEX >::wait().
00166 { 00167 ACE_Time_Value abs_time; 00168 00169 if (timeout) 00170 abs_time = ACE_OS::gettimeofday () + *timeout; 00171 00172 Lock l (mutex_); 00173 00174 while (queue_.is_empty ()) 00175 { 00176 if (timeout) 00177 { 00178 if (cond_.wait (&abs_time) != -1) 00179 break; 00180 } 00181 else 00182 { 00183 if (cond_.wait () != -1) 00184 break; 00185 } 00186 00187 return -1; // errno is already set 00188 } 00189 00190 00191 Message_ptr m; 00192 00193 if (queue_.dequeue_head (m) == -1) 00194 ACE_OS::abort (); 00195 00196 00197 if (queue_.is_empty ()) 00198 { 00199 // Remove data from the pipe. 00200 // 00201 if (signal_pipe_.read_handle () != ACE_INVALID_HANDLE) 00202 { 00203 char c; 00204 00205 if (signal_pipe_.recv (&c, 1) != 1) 00206 { 00207 ACE_OS::perror ("read: "); 00208 ACE_OS::abort (); 00209 } 00210 } 00211 } 00212 00213 if (from) 00214 *from = static_cast<From const*> (m->find (From::id))->address (); 00215 00216 if (m->find (NoData::id) != 0) 00217 { 00218 errno = ENOENT; 00219 return -1; 00220 } 00221 00222 Data const* d = static_cast<Data const*>(m->find (Data::id)); 00223 00224 ssize_t r (static_cast<ssize_t> (d->size () < s ? d->size () : s)); 00225 00226 ACE_OS::memcpy (buf, d->buf (), r); 00227 00228 return r; 00229 } |
|
Definition at line 150 of file Socket.cpp. References ACE_RMCast::Message_ptr, and ACE_RMCast::Profile_ptr.
00151 { 00152 Message_ptr m (new Message); 00153 00154 m->add (Profile_ptr (new Data (buf, s))); 00155 00156 // Qualification is for VC6 and VxWorks. 00157 // 00158 Element::send (m); 00159 } |
|
Definition at line 232 of file Socket.cpp. References ACE_OS::abort(), ACE_Unbounded_Queue< Message_ptr >::dequeue_head(), ACE_Unbounded_Queue< Message_ptr >::enqueue_head(), ACE_OS::gettimeofday(), ACE_Unbounded_Queue< Message_ptr >::is_empty(), ACE_RMCast::Lock, ACE_RMCast::Message_ptr, ACE_RMCast::Data::size(), and ACE_Condition< MUTEX >::wait().
00233 { 00234 ACE_Time_Value abs_time; 00235 00236 if (timeout) 00237 abs_time = ACE_OS::gettimeofday () + *timeout; 00238 00239 Lock l (mutex_); 00240 00241 while (queue_.is_empty ()) 00242 { 00243 if (timeout) 00244 { 00245 if (cond_.wait (&abs_time) != -1) 00246 break; 00247 } 00248 else 00249 { 00250 if (cond_.wait () != -1) 00251 break; 00252 } 00253 00254 return -1; // errno is already set 00255 } 00256 00257 // I can't get the head of the queue without actually dequeuing 00258 // the element. 00259 // 00260 Message_ptr m; 00261 00262 if (queue_.dequeue_head (m) == -1) 00263 ACE_OS::abort (); 00264 00265 if (queue_.enqueue_head (m) == -1) 00266 ACE_OS::abort (); 00267 00268 if (m->find (NoData::id) != 0) 00269 { 00270 errno = ENOENT; 00271 return -1; 00272 } 00273 00274 Data const* d = static_cast<Data const*>(m->find (Data::id)); 00275 00276 return static_cast<ssize_t> (d->size ()); 00277 } |
|
Definition at line 78 of file Socket.cpp. Referenced by Socket_Impl(), and ~Socket_Impl(). |
|
Definition at line 70 of file Socket.cpp. |
|
Definition at line 80 of file Socket.cpp. Referenced by Socket_Impl(), and ~Socket_Impl(). |
|
Definition at line 76 of file Socket.cpp. Referenced by Socket_Impl(), and ~Socket_Impl(). |
|
Definition at line 81 of file Socket.cpp. |
|
Definition at line 66 of file Socket.cpp. Referenced by recv(). |
|
Definition at line 69 of file Socket.cpp. |
|
Definition at line 67 of file Socket.cpp. |
|
Definition at line 72 of file Socket.cpp. |
|
Definition at line 77 of file Socket.cpp. Referenced by Socket_Impl(), and ~Socket_Impl(). |
|
Definition at line 79 of file Socket.cpp. Referenced by Socket_Impl(), and ~Socket_Impl(). |
|
Definition at line 74 of file Socket.cpp. Referenced by get_handle_(), recv(), recv_(), and ~Socket_Impl(). |