summaryrefslogtreecommitdiff
path: root/ACE/ace/TLI_Stream.h
blob: c26823685c33e23f66d124a095e5254ecdf07a63 (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
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
// -*- C++ -*-

//=============================================================================
/**
 *  @file    TLI_Stream.h
 *
 *  @author Doug Schmidt
 */
//=============================================================================


#ifndef ACE_TLI_STREAM_H
#define ACE_TLI_STREAM_H
#include /**/ "ace/pre.h"

#include /**/ "ace/config-lite.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "ace/TLI.h"

#include "ace/INET_Addr.h"

#if defined (ACE_HAS_TLI)

ACE_BEGIN_VERSIONED_NAMESPACE_DECL

class ACE_Time_Value;

/**
 * @class ACE_TLI_Stream
 *
 * @brief Defines the member functions for ACE_TLI_Stream abstraction.
 */
class ACE_Export ACE_TLI_Stream : public ACE_TLI
{
public:
  friend class ACE_TLI_Acceptor;
  friend class ACE_TLI_Connector;

  /// Default constructor.
  ACE_TLI_Stream ();

  // = TLI-specific shutdown operations.
  /// Close down and release resources.
  int close ();

  /// Send a release and then await the release from the other side.
  int active_close ();

  /// Acknowledge the release from the other side and then send the
  /// release to the other side.
  int passive_close ();

  /// Return address of remotely connected peer.
  int get_remote_addr (ACE_Addr &) const;

  // =  timod bindings
  /// Send an n byte buffer to the connected socket (uses t_snd(3)).
  ssize_t send (const void *buf,
                size_t n,
                int flags,
                const ACE_Time_Value *timeout = 0) const;

  /// Recv an n byte buffer from the connected socket (uses t_rcv(3)).
  ssize_t recv (void *buf,
                size_t n,
                int *flags,
                const ACE_Time_Value *timeout = 0) const;

  /// Send exactly n bytes to the connected socket (uses t_snd(3)).
  ssize_t send_n (const void *buf,
                  size_t n,
                  int flags,
                  const ACE_Time_Value *timeout = 0,
                  size_t *bytes_transferred = 0) const;

  /// Recv exactly n bytes from the connected socket (uses t_rcv(3)).
  ssize_t recv_n (void *buf,
                  size_t n,
                  int *flags,
                  const ACE_Time_Value *timeout = 0,
                  size_t *bytes_transferred = 0) const;

  // = tirdwr bindings
  /// Send an n byte buffer to the connected socket (uses write(2)).
  ssize_t send (const void *buf,
                size_t n,
                const ACE_Time_Value *timeout = 0) const;

  /// Recv an n byte buffer from the connected socket (uses read(2)).
  ssize_t recv (void *buf,
                size_t n,
                const ACE_Time_Value *timeout = 0) const;

  /// Send n bytes, keep trying until n are sent (uses write(2)).
  ssize_t send_n (const void *buf,
                  size_t n,
                  const ACE_Time_Value *timeout = 0,
                  size_t *bytes_transferred = 0) const;

  /// Recv n bytes, keep trying until n are received (uses read (2)).
  ssize_t recv_n (void *buf,
                  size_t n,
                  const ACE_Time_Value *timeout = 0,
                  size_t *bytes_transferred = 0) const;

  // = Meta-type info
  typedef ACE_INET_Addr PEER_ADDR;

  /// Dump the state of an object.
  void dump () const;

  /// Declare the dynamic allocation hooks.
  ACE_ALLOC_HOOK_DECLARE;

private:
  /// Indicates whether the tirdwr module should be pushed
  int rwflag_;

  /// Get rwflag
  int get_rwflag () const;

  /// Set rwflag
  void set_rwflag (int value);
};

ACE_END_VERSIONED_NAMESPACE_DECL

#if defined (__ACE_INLINE__)
#include "ace/TLI_Stream.inl"
#endif /* __ACE_INLINE__ */

#endif /* ACE_HAS_TLI */
#include /**/ "ace/post.h"
#endif /* ACE_TLI_STREAM_H */