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
|
// $Id$
#include "ace/os_include/os_netdb.h"
#include "ace/OS_NS_errno.h"
#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Acceptor.h"
#include "ace/Log_Msg.h"
#include "ace/Time_Value.h"
int ACE_TMAIN (int, ACE_TCHAR *[])
{
// Listing 1 code/ch06
ACE_INET_Addr port_to_listen ("HAStatus");
ACE_SOCK_Acceptor acceptor;
if (acceptor.open (port_to_listen, 1) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("acceptor.open")),
100);
// Listing 1
/*
* The complete open signature:
*
// Listing 2 code/ch06
int open (const ACE_Addr &local_sap,
int reuse_addr = 0,
int protocol_family = PF_INET,
int backlog = ACE_DEFAULT_BACKLOG,
int protocol = 0);
// Listing 2
*
*/
while (1)
{
ACE_SOCK_Stream peer;
ACE_INET_Addr peer_addr;
ACE_Time_Value timeout (10, 0);
/*
* Basic acceptor usage
*/
#if 0
// Listing 3 code/ch06
if (acceptor.accept (peer) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("(%P|%t) Failed to accept ")
ACE_TEXT ("client connection\n")),
100);
// Listing 3
#endif /* 0 */
// Listing 4 code/ch06
if (acceptor.accept (peer, &peer_addr, &timeout, 0) == -1)
{
if (ACE_OS::last_error() == EINTR)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) Interrupted while ")
ACE_TEXT ("waiting for connection\n")));
else
if (ACE_OS::last_error() == ETIMEDOUT)
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) Timeout while ")
ACE_TEXT ("waiting for connection\n")));
}
// Listing 4
// Listing 5 code/ch06
else
{
ACE_TCHAR peer_name[MAXHOSTNAMELEN];
peer_addr.addr_to_string (peer_name, MAXHOSTNAMELEN);
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%P|%t) Connection from %s\n"),
peer_name));
// Listing 5
// Listing 7 code/ch06
char buffer[4096];
ssize_t bytes_received;
while ((bytes_received =
peer.recv (buffer, sizeof(buffer))) != -1)
{
peer.send_n (buffer, bytes_received);
}
peer.close ();
// Listing 7
}
}
ACE_NOTREACHED (return 0);
}
|