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

//==========================================================================
/**
 *  @file    SOCK_IO.h
 *
 *  @author Douglas C. Schmidt <d.schmidt@vanderbilt.edu>
 */
//==========================================================================

#ifndef ACE_SOCK_IO_H
#define ACE_SOCK_IO_H

#include /**/ "ace/pre.h"

#include "ace/SOCK.h"

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

#include "ace/ACE.h"

ACE_BEGIN_VERSIONED_NAMESPACE_DECL

/**
 * @class ACE_SOCK_IO
 *
 * @brief Defines the methods for the ACE socket wrapper I/O routines
 * described below.
 *
 * If @a timeout == 0, then the call behaves as a normal
 * send/recv call, i.e., for blocking sockets, the call will
 * block until action is possible; for non-blocking sockets,
 * -1 will be returned with errno == EWOULDBLOCK if no action is
 * immediately possible.
 * If @a timeout != 0, the call will wait until the relative time
 * specified in *@a timeout elapses.
 * Errors are reported by -1 and 0 return values.  If the
 * operation times out, -1 is returned with @c errno == ETIME.
 * If it succeeds the number of bytes transferred is returned.
 * Methods with the extra @a flags argument will always result in
 * @c send getting called. Methods without the extra @a flags
 * argument will result in @c send getting called on Win32
 * platforms, and @c write getting called on non-Win32 platforms.
 */
class ACE_Export ACE_SOCK_IO : public ACE_SOCK
{
public:
  /// Constructor.
  ACE_SOCK_IO ();

  /// Destructor.
  ~ACE_SOCK_IO ();

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

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

  /// Recv an <iovec> of size @a n from the connected socket.
  ssize_t recvv (iovec iov[],
                 int n,
                 const ACE_Time_Value *timeout = 0) const;

  /**
   * Allows a client to read from a socket without having to provide a
   * buffer to read.  This method determines how much data is in the
   * socket, allocates a buffer of this size, reads in the data, and
   * returns the number of bytes read.  The caller is responsible for
   * deleting the member in the <iov_base> field of @a io_vec using
   * delete [] io_vec->iov_base.
   */
  ssize_t recvv (iovec *io_vec,
                 const ACE_Time_Value *timeout = 0) const;

#ifndef ACE_LACKS_VA_FUNCTIONS
  /// Recv @a n varargs messages to the connected socket.
  ssize_t recv (size_t n,
                ...) const;
#endif

  /// Recv @a n bytes via Win32 @c ReadFile using overlapped I/O.
  ssize_t recv (void *buf,
                size_t n,
                ACE_OVERLAPPED *overlapped) const;

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

  /// Send an @a n byte buffer to the connected socket.
  ssize_t send (const void *buf,
                size_t n,
                const ACE_Time_Value *timeout = 0) const;

  /// Send an @c iovec of size @a n to the connected socket.
  ssize_t sendv (const iovec iov[],
                 int n,
                 const ACE_Time_Value *timeout = 0) const;

#ifndef ACE_LACKS_VA_FUNCTIONS
  /// Send @a n varargs messages to the connected socket.
  ssize_t send (size_t n,
                ...) const;
#endif

  /// Send @a n bytes via Win32 <WriteFile> using overlapped I/O.
  ssize_t send (const void *buf,
                size_t n,
                ACE_OVERLAPPED *overlapped) const;

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

  /// Declare the dynamic allocation hooks.
  ACE_ALLOC_HOOK_DECLARE;
};

ACE_END_VERSIONED_NAMESPACE_DECL

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

#include /**/ "ace/post.h"

#endif /* ACE_SOCK_IO_H */