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
|
// $Id$
#include "ace/INET_Addr.h"
#include "ace/os_include/os_netdb.h"
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
template <class ACCEPTOR, class CONNECTOR, class DETECTION_HANDLER>
Fault_Detector_T<ACCEPTOR, CONNECTOR, DETECTION_HANDLER>::Fault_Detector_T()
{
}
template <class ACCEPTOR, class CONNECTOR, class DETECTION_HANDLER>
Fault_Detector_T<ACCEPTOR, CONNECTOR, DETECTION_HANDLER>::~Fault_Detector_T()
{
}
template <class ACCEPTOR, class CONNECTOR, class DETECTION_HANDLER>
int
Fault_Detector_T<ACCEPTOR, CONNECTOR, DETECTION_HANDLER>::init_acceptor()
{
typename CONNECTOR::PEER_ADDR listen_addr;
if (acceptor_.open(listen_addr, &reactor_task_.reactor_) != 0)
ACE_ERROR_RETURN((LM_ERROR, "Connot open acceptor\n"), -1);
if (acceptor_.acceptor().get_local_addr(listen_addr) !=0)
ACE_ERROR_RETURN((LM_ERROR, "Connot get local addr\n"), -1);
ACE_DEBUG((LM_DEBUG, "listening at %s:%d\n", listen_addr.get_host_name(),
listen_addr.get_port_number()));
char* buf = CORBA::string_alloc(MAXHOSTNAMELEN);
listen_addr.addr_to_string(buf, MAXHOSTNAMELEN, 0);
location_.length(1);
location_[0].id = buf;
return 0;
}
template <class ACCEPTOR, class CONNECTOR, class DETECTION_HANDLER>
int
Fault_Detector_T<ACCEPTOR, CONNECTOR, DETECTION_HANDLER>::connect(const FTRT::Location& location)
{
if (location.length() == 0)
return -1;
typename CONNECTOR::PEER_ADDR prev_addr(location[0].id);
DETECTION_HANDLER* handler;
ACE_NEW_RETURN(handler, DETECTION_HANDLER(listener_), 0) ;
handler->reactor(&reactor_task_.reactor_);
ACE_DEBUG((LM_DEBUG, "connecting to %s\n", location[0].id.in()));
int result = connector_.connect(handler->peer(), prev_addr);
if (result == 0)
handler->open(this);
else
handler->close();
return result ;
}
TAO_END_VERSIONED_NAMESPACE_DECL
|