You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# Chops Net IP - Connective Handcrafted Openwork Software for Asynchronous IP Networking
2
8
3
-
Chops Net IP is a C++ library that makes asynchronous networking programming fun. Or at least if not fun, it makes network programming Asio, easier and safer, without significantly sacrificing performance. It is layered on top of the Asio asynchronous networking library, which is not an easy library to use correctly. It handles Internet Protocol (IP) communications including TCP, UDP, and UDP multicast. It is written using modern C++ design idioms and the latest (2017) C++ standard.
9
+
Chops Net IP is a C++ library that makes asynchronous networking programming fun. Or at least if not fun, it makes network programming easier and safer, without significantly sacrificing performance. Chops Net IP handles Internet Protocol (IP) communications including TCP, UDP, and UDP multicast. It is written using modern C++ design idioms and the latest (2017) C++ standard.
4
10
5
11
Chops Net IP is not like any other high-level, general purpose C++ socket library.
6
12
13
+
Chops Net IP is layered on top of the Asio asynchronous networking library, taking advantage of the portability and functionality that Asio provides. However, it simplifies network programming compared to coding against the Asio API, while providing easy scalability through the asynchronous facilities.
This project is distributed under the [Boost Software License](LICENSE.txt).
10
20
11
21
## Chops Net IP Release Status
12
22
13
-
Release 1.0 is under development as of March 2019, awaiting `std::expected` (proposed for C++ 20) error handling improvement, CMake config file completion, and additional testing under multiple compilers and platforms.
23
+
Release 1.0 is under development as of January 2020, awaiting CMake enhancements, a comprehensive tutorial, and additional testing under multiple compilers and platforms.
14
24
15
25
Release notes and upcoming development plans are [available here](doc/release.md).
16
26
@@ -51,7 +61,7 @@ Example environments where Chops Net IP is a good fit:
51
61
- Applications that are event driven or highly asynchronous in nature.
52
62
- Applications where data is generated and handled in a non-symmetric manner. For example, data may be generated on the TCP acceptor side, or may be generated on a TCP connector side, or on both sides depending on the use case. Similarly, applications where the data flow is bi-directional and sends or receives are data-driven versus pattern-driven work well with this library.
53
63
- Applications interacting with multiple (many) connections (e.g. handling multiple sensors or inputs or outputs), each with low to moderate throughput needs (i.e. IoT environments, chat networks, gaming networks).
54
-
- Small footprint or embedded environments, where all network processing is run inside a single thread. In particular, environments where a JVM (or similar run-time support) is too costly in terms of system resource, but have a relatively rich operating environment (e.g. Linux running on a small chip) are a very good fit. (Currently the main constraint is small system support in the Networking TS implementation.)
64
+
- Small footprint or embedded environments, where all network processing is run inside a single thread. In particular, environments where a JVM (or similar run-time support) is too costly in terms of system resources, but have a relatively rich operating environment (e.g. Linux running on a small chip) are a very good fit. (Currently the main constraint is small system support in the Asio library implementation.)
55
65
- Applications with relatively simple network processing that need an easy-to-use and quick-for-development networking library.
56
66
- Applications with configuration driven networks that may need to switch (for example) between TCP connect versus TCP accept for a given connection, or between TCP and UDP for a given communication path.
57
67
- Peer-to-peer applications where the application doesn't care which side connects or accepts.
@@ -69,31 +79,32 @@ A detailed overview, a C++ socket library comparison, and a FAQ is [available he
69
79
70
80
# C++ Language Requirements and Alternatives
71
81
72
-
C++ 17 is the primary standards baseline for this repository. There is also one future C++ facility in use (`std::expected`, for better and simpler error handling).
82
+
C++ 17 is the primary standards baseline for this repository. There is also one future C++ facility in use (`std::expected`, allowing error handling without using exceptions).
73
83
74
-
A significant number of C++ 11 features are in the implementation and API. There are also limited C++ 14 and 17 features in use, although they tend to be relatively simple features of those standards (e.g. `std::byte`, structured bindings). For users that don't want to use the latest C++ compilers or compile with C++ 17 flags, Martin Moene provides an excellent set of header-only libraries that implement many useful C++ library features, both C++ 17 as well as future C++ standards (see [References](doc/references.md)).
84
+
A significant number of C++ 11 features are in the implementation and API. There are also C++ 14 and 17 features in use such as `std::byte`, `std::optional`, `std::variant` and `auto` parameters in lambda functions. For users that don't want to use the latest C++ compilers or compile with C++ 17 flags, Martin Moene provides an excellent set of header-only libraries that implement many useful C++ 17 library features (for older compilers or standards), as well as future C++ features (see [References](doc/references.md)).
75
85
76
-
While the main production branch will always be developed and tested with C++ 17 features (and relatively current compilers), alternative branches and forks for older compiler versions are expected. In particular, a branch using Martin's libraries and general C++ 11 (or C++ 14) conformance is expected for the future, and collaboration (through forking, change requests, etc) is very welcome. A branch supporting a pre-C++ 11 compiler or language conformance is not likely to be directly supported through this repository (since it would require so many changes that it would result in a defacto different codebase).
86
+
While the main production branch will always be developed and tested with C++ 17 features (and relatively current compilers), alternative branches and forks for older compiler versions are welcome. In particular, a branch using Martin's libraries and general C++ 11 (or C++ 14) conformance would be useful. A branch supporting a pre-C++ 11 compiler or language conformance is not likely to be directly supported through this repository (since it would require so many changes that it would result in a defacto different codebase).
77
87
78
88
# External Dependencies
79
89
80
-
The libraries and API's have minimal (as possible) library dependencies (there are heavy dependencies on the C++ standard library in all of the code). ~~There are more dependencies in the test code than in the production code.~~
90
+
The libraries and API's have minimal (as possible) library dependencies (there are heavy dependencies on the C++ standard library in all of the code). There are more dependencies in the test code than in the production code.
81
91
82
92
All the dependencies listed below have links that will take you to the library or repository.
83
93
84
94
Production external dependencies:
85
95
86
-
- Version 1.12 (or later) of Chris Kohlhoff's [`asio`](https://think-async.com/Asio/) repository is required. Note that it is the stand-alone library, not the Boost Asio implementation.
87
-
- Version 0.9 (or later) of [`utility-rack`](https://connectivecpp.github.io/utility-rack), which is a repository in the same GitHub account as Chops Net IP (`shared_buffer.hpp` and `erase_where.hpp` are required).
88
-
-~~Version 0.1 (or later) of Martin Moene's `expected-lite` library.~~
89
-
- Version 1.65.1 (or later) of the [Boost library](https://www.boost.org/). We are currently using version `1.69.0`.
96
+
- Version 1.13 (or later) of Chris Kohlhoff's [`asio`](https://github.com/chriskohlhoff/asio) library is required. Note that it is the stand-alone Asio library, not the Boost Asio version.
97
+
- The [`utility-rack`](https://github.com/connectivecpp/utility-rack) library, which is a repository in the same GitHub account as Chops Net IP.
90
98
91
99
Test external dependencies:
92
100
93
-
- Version 2.1.0 (or later) of Phil Nash's [Catch 2](https://github.com/catchorg/Catch2) is required for all test scenarios.
94
-
-~~Version 1.65.1 (or later) of the Boost library is required in some test scenarios (`boost.endian` at minimum).~~
101
+
- Version 2.8.0 (or later) of Phil Nash's [`Catch2`](https://github.com/catchorg/Catch2) library is required for all test scenarios.
102
+
103
+
There are single file headers that have been copied into the `third_party` directory of the `utility-rack` repository from various GitHub repositories and do not require any external dependency management. These are:
95
104
96
-
See [References](doc/references.md) for additional details on the above libraries.
105
+
- Martin Moene's [`expected-lite`](https://github.com/martinmoene/expected-lite) library.
106
+
107
+
See [References](doc/references.md) for additional details.
97
108
98
109
# Supported Compilers and Platforms
99
110
@@ -102,6 +113,8 @@ Chops Net IP has been compiled and tests run on:
- (TBD, will include at least clang on linux and vc++ on Windows)
104
115
116
+
Follow the CI links for additional build environments.
117
+
105
118
# Installation
106
119
107
120
Chops Net IP is header-only, so installation consists of downloading or cloning and setting compiler include paths appropriately. No compile time configuration macros are defined.
@@ -112,9 +125,5 @@ See [References](doc/references.md) for details on dependencies and inspirations
112
125
113
126
# About
114
127
115
-
The primary author of Chops is Cliff Green, cliffg at connectivecpp dot com. The primary co-author is Thurman Gillespy, thurmang at connectivecpp dot com, and Roxanne Agerone roxannea at connectivecpp dot com.
116
-
117
-
Collaborators include Roxanne Agerone and Nathan Deutsch.
118
-
119
-
Additional information including author comments is [available here](doc/about.md).
128
+
Team member information is [available here](https://connectivecpp.github.io/), and a few random author comments are [available here](doc/about.md).
Copy file name to clipboardExpand all lines: doc/about.md
+1-7Lines changed: 1 addition & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,14 +1,8 @@
1
1
# Author Notes and Contributor Information
2
2
3
-
The primary author of Chops Net IP is Cliff Green, cliffg at connectivecpp dot com. Cliff is a software engineer and has worked for many years writing infrastructure libraries and applications for use in networked and distributed systems, typically where high reliability or uptime is required. The domains where he has worked include wireless networks (in particular cellular 9-1-1), location technology, and large scale embedded and simulation systems in the military aerospace industry. He has volunteered every year at CppCon and presented at BoostCon (before it was renamed to C++ Now).
4
-
5
-
Cliff lives in the Seattle area and you may know him from other interests including volleyball, hiking, railroading (both the model variety and the real life big ones), music, or even parent support activities (if you are having major difficulties with your teen check out the Changes Parent Support Network, http://cpsn.org).
6
-
7
-
The primary co-author of Chops Net IP is Thurman Gillespy, thurmang at connectivecpp dot com. Thurman's first career was in diagnostic radiology, with stints at the University of Florida (1985 - 1990), University of Washington (1990 - 2008) and private practice in Seattle (2008 - 2015). In the 1990's, Thurman wrote Dr Razz, the first application that could display and manipulate radiology images on a Macintosh computer. In 2015 Thurman left medicine and went back to school to transform a life long hobby of programming into a second career as a software developer.
8
-
9
3
## A Cliff Note on the Chops Name
10
4
11
-
>Yes, the name / acronym is a stretch. Quite a stretch. I like the word "chops", which is a jazz term for strong technique, so I decided on that for a name. For example, "Check out Tal Wilkenfeld, she's got mad chops."
5
+
>(from Cliff, 2018) Yes, the name / acronym is a stretch. Quite a stretch. I like the word "chops", which is a jazz term for strong technique, so I decided on that for a name. For example, "Check out Tal Wilkenfeld, she's got mad chops."
12
6
13
7
>I considered many names, at least two or three dozen, but my favorite ideas were all taken (or too close to existing names and could create confusion). It seems that a lot of software developers have similar creative ideas when it comes to names.
0 commit comments