// -*- C++ -*- //============================================================================= /** * @file LOCK_SOCK_Acceptor.h * * @author James Hu and Irfan Pyarali */ //============================================================================= #ifndef ACE_LOCK_SOCK_ACCEPTOR_H #define ACE_LOCK_SOCK_ACCEPTOR_H #include /**/ "ace/pre.h" #include "ace/SOCK_Acceptor.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ ACE_BEGIN_VERSIONED_NAMESPACE_DECL /** * @class ACE_LOCK_SOCK_Acceptor * * @brief Specialize ACE_SOCK_Acceptor to lock around ; * * This class is necessary since some OS platforms do not allow * multiple threads/processes to simultaneously call @c accept * on the same listen-mode port/socket. Thus, we need to * protect against multiple concurrent accesses by using * the appropriate type of lock. */ template class ACE_LOCK_SOCK_Acceptor : public ACE_SOCK_Acceptor { public: /// Accept the connection under the control of the . int accept (ACE_SOCK_Stream &new_stream, ACE_Addr *remote_addr = 0, ACE_Time_Value *timeout = 0, bool restart = true, bool reset_new_handle = false) const; /// Return a reference to the lock. ACE_LOCK &lock (); protected: /// Type of locking mechanism. ACE_LOCK lock_; }; ACE_END_VERSIONED_NAMESPACE_DECL #include "ace/LOCK_SOCK_Acceptor.cpp" #include /**/ "ace/post.h" #endif /* ACE_LOCK_SOCK_ACCEPTOR_H */