summaryrefslogtreecommitdiff
path: root/ace/LSOCK_Acceptor.cpp
blob: 947c83185234564f38a1748667d909bfea143f1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// LSOCK_Acceptor.cpp
// $Id$

#define ACE_BUILD_DLL
#include "ace/LSOCK_Acceptor.h"

#if !defined (__ACE_INLINE__)
#include "ace/LSOCK_Acceptor.i"
#endif /* __ACE_INLINE__ */

ACE_RCSID(ace, LSOCK_Acceptor, "$Id$")

#if !defined (ACE_LACKS_UNIX_DOMAIN_SOCKETS)

ACE_ALLOC_HOOK_DEFINE(ACE_LSOCK_Acceptor)

// Return the local endpoint address.

int 
ACE_LSOCK_Acceptor::get_local_addr (ACE_Addr &a) const
{
  ACE_TRACE ("ACE_LSOCK_Acceptor::get_local_addr");
  a = this->local_addr_;
  return 0;
}

void
ACE_LSOCK_Acceptor::dump (void) const
{
  ACE_TRACE ("ACE_LSOCK_Acceptor::dump");

  ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
  this->local_addr_.dump ();
  ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
}

// Do nothing routine for constructor.

ACE_LSOCK_Acceptor::ACE_LSOCK_Acceptor (void)
{
  ACE_TRACE ("ACE_LSOCK_Acceptor::ACE_LSOCK_Acceptor");
}

int
ACE_LSOCK_Acceptor::open (const ACE_Addr &remote_sap, 
			  int reuse_addr, 
			  int protocol_family, 
			  int backlog, 
			  int protocol)
{
  ACE_TRACE ("ACE_LSOCK_Acceptor::open");
  this->local_addr_ = *((ACE_UNIX_Addr *) &remote_sap); // This is a gross hack...
  return ACE_SOCK_Acceptor::open (remote_sap, reuse_addr, 
				  protocol_family, backlog, protocol);
}

// General purpose routine for performing server ACE_SOCK creation.

ACE_LSOCK_Acceptor::ACE_LSOCK_Acceptor (const ACE_Addr &remote_sap, 
					int reuse_addr, 
					int protocol_family, 
					int backlog, 
					int protocol)
{
  ACE_TRACE ("ACE_LSOCK_Acceptor::ACE_LSOCK_Acceptor");
  if (this->open (remote_sap, reuse_addr,
		  protocol_family, backlog, protocol) == -1)
    ACE_ERROR ((LM_ERROR, "ACE_LSOCK_Acceptor::ACE_LSOCK_Acceptor"));
}

// General purpose routine for accepting new connections.

int
ACE_LSOCK_Acceptor::accept (ACE_LSOCK_Stream &new_local_ipc_sap, 
			    ACE_Addr *remote_addr, 
			    ACE_Time_Value *timeout,
			    int restart,
                            int reset_new_handle) const
{
  ACE_TRACE ("ACE_LSOCK_Acceptor::accept");
  ACE_HANDLE new_handle = 
    ACE_SOCK_Acceptor::shared_accept (remote_addr, timeout, restart, reset_new_handle);
  new_local_ipc_sap.set_handle (new_handle);
  return new_handle == ACE_INVALID_HANDLE ? -1 : 0;
}

// Close down the UNIX domain stream and remove the rendezvous point
// from the file system.

int
ACE_LSOCK_Acceptor::remove (void)
{
  ACE_TRACE ("ACE_LSOCK_Acceptor::remove");
  int result = this->close ();
  return ACE_OS::unlink (this->local_addr_.get_path_name ()) == -1 
    || result == -1 ? -1 : 0;
}

#endif /* ACE_LACKS_UNIX_DOMAIN_SOCKETS */