OnixS C++ B3 BOE Binary Order Entry  1.2.0
API Documentation
TcpStandardStack.h
Go to the documentation of this file.
1 /*
2 * Copyright Onix Solutions Limited [OnixS]. All rights reserved.
3 *
4 * This software owned by Onix Solutions Limited [OnixS] and is protected by copyright law
5 * and international copyright treaties.
6 *
7 * Access to and use of the software is governed by the terms of the applicable OnixS Software
8 * Services Agreement (the Agreement) and Customer end user license agreements granting
9 * a non-assignable, non-transferable and non-exclusive license to use the software
10 * for it's own data processing purposes under the terms defined in the Agreement.
11 *
12 * Except as otherwise granted within the terms of the Agreement, copying or reproduction of any part
13 * of this source code or associated reference material to any other location for further reproduction
14 * or redistribution, and any amendments to this copyright notice, are expressly prohibited.
15 *
16 * Any reproduction or redistribution for sale or hiring of the Software not in accordance with
17 * the terms of the Agreement is a violation of copyright law.
18 */
19 #pragma once
20 
23 
24 namespace OnixS {
25 namespace B3 {
26 namespace BOE {
27 
28 /**
29  * A high-level wrapper over the TCP standard stack.
30  */
32 {
33 public:
34  /**
35  * Allocates a TCP stack.
36  */
38 
39 #if defined(ONIXS_B3_BOE_CXX11)
40  TcpStandardStack(const TcpStandardStack &) = delete;
42 
43  TcpStandardStack & operator=(const TcpStandardStack &) = delete;
44  TcpStandardStack & operator=(TcpStandardStack &&) = delete;
45 #endif
46 
48 
49  /**
50  * Processes events on a stack and performs the necessary handling.
51  *
52  * These events, including transmit and receive events raised by the hardware,
53  * and also software events such as TCP and FIXP protocol timers.
54  *
55  */
57  dispatchEventsImpl();
58  }
59 
60  /**
61  * \return a boolean value indicating whether a stack is quiescent.
62  *
63  * This can be used to ensure that all connections have been closed gracefully before destroying a stack
64  * (or exiting the application). Destroying a stack while it is not quiescent is permitted by the API,
65  * but when doing so there is no guarantee that sent data has been acknowledged by the peer or even transmitted,
66  * and there is the possibility that peers' connections will be reset.
67  */
69  return isQuiescentImpl();
70  }
71 
72  /**
73  * \return the ID of the thread that created the stack.
74  */
76  return threadId_;
77  }
78 
81  }
82 
83 private:
84  void dispatchEventsImpl();
85 
86  bool isQuiescentImpl() const;
87 
88  class Impl;
89  Impl * const impl_;
90 
91  Threading::ThreadId const threadId_;
92 
93 #if !defined(ONIXS_B3_BOE_CXX11)
95  TcpStandardStack & operator=(const TcpStandardStack &);
96 #endif
97 
98  friend class SessionImpl;
99 };
100 
101 }}}
Threading::ThreadId workingThreadId() const noexceptoverride
pthread_t ThreadId
Type alias for thread identifier.
Definition: Definitions.h:34
#define ONIXS_B3_BOE_NOTHROW
Definition: Compiler.h:182
bool isQuiescent() const override
#define ONIXS_B3_BOE_EXPORTED
Definition: Compiler.h:181
Session's network stack reactor interface.
Definition: Defines.h:40
#define ONIXS_B3_BOE_OVERRIDE
Definition: Compiler.h:186
ReactorType::Enum type() const noexceptoverride
#define ONIXS_B3_BOE_FINAL
Definition: Compiler.h:187
A high-level wrapper over the TCP standard stack.
void dispatchEvents() override
Processes events on a stack and performs the necessary handling.