diff options
author | schmidt <douglascraigschmidt@users.noreply.github.com> | 1999-07-18 21:56:49 +0000 |
---|---|---|
committer | schmidt <douglascraigschmidt@users.noreply.github.com> | 1999-07-18 21:56:49 +0000 |
commit | df505ef0bb08baeb35a63c79147c105953d9a21c (patch) | |
tree | 99ee8799a4af71d1331db06c061471034f014ffb /ace/SOCK_Acceptor.cpp | |
parent | 7f6c541f08e32b48a3f391bbd21e25f530d499c7 (diff) | |
download | ATCD-df505ef0bb08baeb35a63c79147c105953d9a21c.tar.gz |
ChangeLogTag:Sun Jul 18 14:30:54 1999 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
Diffstat (limited to 'ace/SOCK_Acceptor.cpp')
-rw-r--r-- | ace/SOCK_Acceptor.cpp | 164 |
1 files changed, 90 insertions, 74 deletions
diff --git a/ace/SOCK_Acceptor.cpp b/ace/SOCK_Acceptor.cpp index 96726920173..612dd023028 100644 --- a/ace/SOCK_Acceptor.cpp +++ b/ace/SOCK_Acceptor.cpp @@ -71,8 +71,9 @@ ACE_SOCK_Acceptor::shared_accept_finish (ACE_SOCK_Stream new_stream, { // Save/restore errno. ACE_Errno_Guard error (errno); - // Only disable ACE_NONBLOCK if we weren't in - // non-blocking mode originally. + + // Only disable ACE_NONBLOCK if we weren't in non-blocking mode + // originally. ACE::clr_flags (this->get_handle (), ACE_NONBLOCK); ACE::clr_flags (new_handle, @@ -194,25 +195,6 @@ ACE_SOCK_Acceptor::accept (ACE_SOCK_Stream &new_stream, reset_new_handle); } -// General purpose routine for performing server ACE_SOCK creation. - -ACE_SOCK_Acceptor::ACE_SOCK_Acceptor (const ACE_Addr &local_sap, - int reuse_addr, - int protocol_family, - int backlog, - int protocol) -{ - ACE_TRACE ("ACE_SOCK_Acceptor::ACE_SOCK_Acceptor"); - if (this->open (local_sap, - reuse_addr, - protocol_family, - backlog, - protocol) == -1) - ACE_ERROR ((LM_ERROR, - ASYS_TEXT ("%p\n"), - ASYS_TEXT ("ACE_SOCK_Acceptor"))); -} - void ACE_SOCK_Acceptor::dump (void) const { @@ -220,6 +202,58 @@ ACE_SOCK_Acceptor::dump (void) const } int +ACE_SOCK_Acceptor::shared_open (const ACE_Addr &local_sap, + int protocol_family, + int backlog) +{ + ACE_TRACE ("ACE_SOCK_Acceptor::shared_open"); + int error = 0; + + if (protocol_family == PF_INET) + { + sockaddr_in local_inet_addr; + ACE_OS::memset (ACE_reinterpret_cast (void *, + &local_inet_addr), + 0, + sizeof local_inet_addr); + + if (local_sap == ACE_Addr::sap_any) + { + local_inet_addr.sin_port = 0; + local_inet_addr.sin_addr.s_addr = htonl (INADDR_ANY); + } + else + local_inet_addr = *ACE_reinterpret_cast (sockaddr_in *, + local_sap.get_addr ()); + if (local_inet_addr.sin_port == 0) + { + if (ACE::bind_port (this->get_handle (), + local_inet_addr.sin_addr.s_addr) == -1) + error = 1; + } + else if (ACE_OS::bind (this->get_handle (), + ACE_reinterpret_cast (sockaddr *, + &local_inet_addr), + sizeof local_inet_addr) == -1) + error = 1; + } + else if (ACE_OS::bind (this->get_handle (), + (sockaddr *) local_sap.get_addr (), + local_sap.get_size ()) == -1) + error = 1; + + if (error != 0 + || ACE_OS::listen (this->get_handle (), + backlog) == -1) + { + error = 1; + this->close (); + } + + return error ? -1 : 0; +} + +int ACE_SOCK_Acceptor::open (const ACE_Addr &local_sap, ACE_Protocol_Info *protocolinfo, ACE_SOCK_GROUP g, @@ -230,15 +264,19 @@ ACE_SOCK_Acceptor::open (const ACE_Addr &local_sap, int protocol) { ACE_TRACE ("ACE_SOCK_Acceptor::open"); - ACE_UNUSED_ARG (local_sap); - ACE_UNUSED_ARG (protocolinfo); - ACE_UNUSED_ARG (g); - ACE_UNUSED_ARG (flags); - ACE_UNUSED_ARG (reuse_addr); - ACE_UNUSED_ARG (protocol_family); - ACE_UNUSED_ARG (backlog); - ACE_UNUSED_ARG (protocol); - ACE_NOTSUP_RETURN (-1); + + if (ACE_SOCK::open (SOCK_STREAM, + protocol_family, + protocol, + protocolinfo, + g, + flags, + reuse_addr) == -1) + return -1; + else + return this->shared_open (local_sap, + protocol_family, + backlog); } ACE_SOCK_Acceptor::ACE_SOCK_Acceptor (const ACE_Addr &local_sap, @@ -274,55 +312,33 @@ ACE_SOCK_Acceptor::open (const ACE_Addr &local_sap, int protocol) { ACE_TRACE ("ACE_SOCK_Acceptor::open"); - int error = 0; if (ACE_SOCK::open (SOCK_STREAM, protocol_family, protocol, reuse_addr) == -1) - error = 1; - - else if (protocol_family == PF_INET) - { - sockaddr_in local_inet_addr; - ACE_OS::memset ((void *) &local_inet_addr, - 0, - sizeof local_inet_addr); - - if (local_sap == ACE_Addr::sap_any) - { - local_inet_addr.sin_port = 0; - local_inet_addr.sin_addr.s_addr = htonl (INADDR_ANY); - } - else - local_inet_addr = *(sockaddr_in *) local_sap.get_addr (); - - if (local_inet_addr.sin_port == 0) - { - if (ACE::bind_port (this->get_handle (), - local_inet_addr.sin_addr.s_addr) == -1) - error = 1; - } - else - { - if (ACE_OS::bind (this->get_handle (), - ACE_reinterpret_cast (sockaddr *, - &local_inet_addr), - sizeof local_inet_addr) == -1) - error = 1; - } - } - else if (ACE_OS::bind (this->get_handle (), - (sockaddr *) local_sap.get_addr (), - local_sap.get_size ()) == -1) - error = 1; + return -1; + else + return this->shared_open (local_sap, + protocol_family, + backlog); +} - if (error || ACE_OS::listen (this->get_handle (), - backlog) == -1) - { - error = 1; - this->close (); - } +// General purpose routine for performing server ACE_SOCK creation. - return error ? -1 : 0; +ACE_SOCK_Acceptor::ACE_SOCK_Acceptor (const ACE_Addr &local_sap, + int reuse_addr, + int protocol_family, + int backlog, + int protocol) +{ + ACE_TRACE ("ACE_SOCK_Acceptor::ACE_SOCK_Acceptor"); + if (this->open (local_sap, + reuse_addr, + protocol_family, + backlog, + protocol) == -1) + ACE_ERROR ((LM_ERROR, + ASYS_TEXT ("%p\n"), + ASYS_TEXT ("ACE_SOCK_Acceptor"))); } |