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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/* -*- C++ -*- */
//=============================================================================
/**
* @file MEM_Stream.h
*
* $Id$
*
* @author Nanbor Wang <nanbor@cs.wustl.edu>
*/
//=============================================================================
#ifndef ACE_MEM_STREAM_H
#define ACE_MEM_STREAM_H
#include "ace/pre.h"
#include "ace/MEM_IO.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#if (ACE_HAS_POSITION_INDEPENDENT_POINTERS == 1)
#include "ace/INET_Addr.h"
class ACE_MEM_Acceptor;
class ACE_MEM_Connector;
/**
* @class ACE_MEM_Stream
*
* @brief Defines the methods in the <ACE_MEM_Stream> abstraction.
*
* This adds additional wrapper methods atop the <ACE_MEM_IO>
* class.
*/
class ACE_Export ACE_MEM_Stream : public ACE_MEM_IO
{
public:
friend class ACE_MEM_Acceptor;
friend class ACE_MEM_Connector;
// Initialization and termination methods.
/// Constructor.
ACE_MEM_Stream (void);
/// Constructor (sets the underlying <ACE_HANDLE> with <h>).
ACE_MEM_Stream (ACE_HANDLE h);
/// Destructor.
~ACE_MEM_Stream (void);
//= The following two methods use write and read system calls.
/// Send n bytes, keep trying until n are sent.
/// Recv n bytes, keep trying until n are received.
ssize_t send_n (const void *buf, int n);
ssize_t recv_n (void *buf, int n);
// = The following two methods use the send and recv system calls.
/// Send n bytes, keep trying until n are sent.
/// Recv n bytes, keep trying until n are received.
ssize_t send_n (const void *buf, int n, int flags);
ssize_t recv_n (void *buf, int n, int flags);
#if 0
/**
* Try to send exactly <len> bytes into <buf> from <handle> (uses
* the <send> call). If <send> blocks for longer than <timeout> the
* number of bytes actually sent is returned with <errno == ETIME>.
* If a timeout does not occur, <send_n> return <len> (i.e., the
* number of bytes requested to be sent).
*/
ssize_t send_n (const void *buf,
size_t len,
int flags,
const ACE_Time_Value *timeout);
/**
* Try to recv exactly <len> bytes into <buf> from <handle> (uses
* the <ACE::recv_n> call). The <ACE_Time_Value> indicates how long
* to blocking trying to receive. If <timeout> == 0, the caller
* will block until action is possible, else will wait until the
* relative time specified in *<timeout> elapses). If <recv> blocks
* for longer than <timeout> the number of bytes actually read is
* returned with <errno == ETIME>. If a timeout does not occur,
* <recv_n> return <len> (i.e., the number of bytes requested to be
* read).
*/
ssize_t recv_n (void *buf,
size_t len,
int flags,
const ACE_Time_Value *timeout);
/**
* Send an <iovec> of size <n> to the connected socket (uses
* <ACE::sendv_n>). Will block until all bytes are sent or an error
* occurs.
*/
ssize_t sendv_n (const iovec iov[],
size_t n) const;
/// Receive an <iovec> of size <n> to the connected socket.
ssize_t recvv_n (iovec iov[],
size_t n) const;
#endif /* 0 */
// = Selectively close endpoints.
/// Close down the reader.
int close_reader (void);
/// Close down the writer.
int close_writer (void);
/**
* Close down the socket (we need this to make things work correctly
* on Win32, which requires use to do a <close_writer> before doing
* the close to avoid losing data).
*/
int close (void);
// = Meta-type info
typedef ACE_Addr PEER_ADDR;
/// Dump the state of an object.
void dump (void) const;
/// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
};
#if !defined (ACE_LACKS_INLINE_FUNCTIONS)
#include "ace/MEM_Stream.i"
#endif /* ACE_LACKS_INLINE_FUNCTIONS */
#endif /* ACE_HAS_POSITION_INDEPENDENT_POINTERS == 1 */
#include "ace/post.h"
#endif /* ACE_MEM_STREAM_H */
|