Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Generated documentation

  • Loading branch information...
commit 46ba941862091d80824b5d2e25875a603a552ece 1 parent 3bbf88f
Pieter Hintjens hintjens authored
168 README.md
Source Rendered
@@ -7,62 +7,56 @@
7 7
8 8
9 9 **<a href="#toc2-11">Overview</a>**
10   -&emsp;<a href="#toc3-14">To report an Issue</a>
11   -&emsp;<a href="#toc3-19">Scope and Goals</a>
12   -&emsp;<a href="#toc3-58">Highlights</a>
13   -&emsp;<a href="#toc3-73">Ownership and License</a>
14   -&emsp;<a href="#toc3-80">Contributing</a>
15   -
16   -**<a href="#toc2-89">Using CZMQ</a>**
17   -&emsp;<a href="#toc3-92">Building and Installing</a>
18   -&emsp;<a href="#toc3-113">Linking with an Application</a>
19   -&emsp;<a href="#toc3-120">API Summary</a>
20   -&emsp;<a href="#toc4-123">zctx - working with ØMQ contexts</a>
21   -&emsp;<a href="#toc4-134">zsocket - working with ØMQ sockets</a>
22   -&emsp;<a href="#toc4-145">zsockopt - working with ØMQ socket options</a>
23   -&emsp;<a href="#toc4-156">zstr - sending and receiving strings</a>
24   -&emsp;<a href="#toc4-181">zfile - work with files</a>
25   -&emsp;<a href="#toc4-192">zframe - working with single message frames</a>
26   -&emsp;<a href="#toc4-203">zmsg - working with multipart messages</a>
27   -&emsp;<a href="#toc4-214">zloop - event-driven reactor</a>
28   -&emsp;<a href="#toc4-225">zthread - working with system threads</a>
29   -&emsp;<a href="#toc4-236">zhash - expandable hash table container</a>
30   -&emsp;<a href="#toc4-247">zlist - singly-linked list container</a>
31   -&emsp;<a href="#toc4-258">zclock - millisecond clocks and delays</a>
32   -
33   -**<a href="#toc2-269">Design Ideology</a>**
34   -&emsp;<a href="#toc3-272">The Problem with C</a>
35   -&emsp;<a href="#toc3-281">A Simple Class Model</a>
36   -&emsp;<a href="#toc3-308">Naming Style</a>
37   -&emsp;<a href="#toc3-317">Containers</a>
38   -&emsp;<a href="#toc3-329">Portability</a>
39   -&emsp;<a href="#toc3-355">Technical Aspects</a>
40   -
41   -**<a href="#toc2-365">Under the Hood</a>**
42   -&emsp;<a href="#toc3-368">Adding a New Class</a>
43   -&emsp;<a href="#toc3-381">Coding Style</a>
44   -&emsp;<a href="#toc3-400">Assertions</a>
45   -&emsp;<a href="#toc3-418">Documentation</a>
46   -&emsp;<a href="#toc3-457">Development</a>
47   -&emsp;<a href="#toc3-467">Porting CZMQ</a>
48   -&emsp;<a href="#toc3-480">Code Generation</a>
49   -&emsp;<a href="#toc3-489">This Document</a>
  10 +&emsp;<a href="#toc3-14">Scope and Goals</a>
  11 +&emsp;<a href="#toc3-53">Highlights</a>
  12 +&emsp;<a href="#toc3-68">Ownership and License</a>
  13 +&emsp;<a href="#toc3-75">Contributing</a>
  14 +
  15 +**<a href="#toc2-82">Using CZMQ</a>**
  16 +&emsp;<a href="#toc3-85">Building and Installing</a>
  17 +&emsp;<a href="#toc3-106">Linking with an Application</a>
  18 +&emsp;<a href="#toc3-113">API Summary</a>
  19 +&emsp;<a href="#toc4-116">zctx - working with ØMQ contexts</a>
  20 +&emsp;<a href="#toc4-127">zsocket - working with ØMQ sockets</a>
  21 +&emsp;<a href="#toc4-138">zsockopt - working with ØMQ socket options</a>
  22 +&emsp;<a href="#toc4-149">zstr - sending and receiving strings</a>
  23 +&emsp;<a href="#toc4-174">zfile - work with files</a>
  24 +&emsp;<a href="#toc4-185">zframe - working with single message frames</a>
  25 +&emsp;<a href="#toc4-196">zmsg - working with multipart messages</a>
  26 +&emsp;<a href="#toc4-207">zloop - event-driven reactor</a>
  27 +&emsp;<a href="#toc4-218">zthread - working with system threads</a>
  28 +&emsp;<a href="#toc4-229">zhash - expandable hash table container</a>
  29 +&emsp;<a href="#toc4-240">zlist - singly-linked list container</a>
  30 +&emsp;<a href="#toc4-251">zclock - millisecond clocks and delays</a>
  31 +
  32 +**<a href="#toc2-262">Design Ideology</a>**
  33 +&emsp;<a href="#toc3-265">The Problem with C</a>
  34 +&emsp;<a href="#toc3-274">A Simple Class Model</a>
  35 +&emsp;<a href="#toc3-301">Naming Style</a>
  36 +&emsp;<a href="#toc3-310">Containers</a>
  37 +&emsp;<a href="#toc3-322">Portability</a>
  38 +&emsp;<a href="#toc3-348">Technical Aspects</a>
  39 +
  40 +**<a href="#toc2-358">Under the Hood</a>**
  41 +&emsp;<a href="#toc3-361">Adding a New Class</a>
  42 +&emsp;<a href="#toc3-374">Coding Style</a>
  43 +&emsp;<a href="#toc3-393">Assertions</a>
  44 +&emsp;<a href="#toc3-411">Documentation</a>
  45 +&emsp;<a href="#toc3-450">Development</a>
  46 +&emsp;<a href="#toc3-460">Porting CZMQ</a>
  47 +&emsp;<a href="#toc3-473">Code Generation</a>
  48 +&emsp;<a href="#toc3-482">This Document</a>
50 49
51 50 <A name="toc2-11" title="Overview" />
52 51 ## Overview
53 52
54   -<A name="toc3-14" title="To report an Issue" />
55   -### To report an Issue
56   -
57   -[Use the issue tracker.](https://zeromq.jira.com/browse/CZMQ)
58   -
59   -<A name="toc3-19" title="Scope and Goals" />
  53 +<A name="toc3-14" title="Scope and Goals" />
60 54 ### Scope and Goals
61 55
62 56 CZMQ has these goals:
63 57
64 58 * To wrap the ØMQ core API in semantics that are natural and lead to shorter, more readable applications.
65   -* To hide the differences between versions of ØMQ, particularly 2.1 and 3.0.
  59 +* To hide the differences between versions of ØMQ, particularly 2.1 and 3.1.
66 60 * To provide a space for development of more sophisticated API semantics.
67 61
68 62 CZMQ grew out of concepts developed in [ØMQ - The Guide](http://zguide.zeromq.org) and [ZFL](http://zfl.zeromq.org). Until end-April 2011, CZMQ was known as *libzapi*.
@@ -71,10 +65,10 @@ CZMQ grew out of concepts developed in [ØMQ - The Guide](http://zguide.zeromq.o
71 65 <img src="https://github.com/zeromq/czmq/raw/master/images/README_1.png" alt="1">
72 66 </center>
73 67
74   -<A name="toc3-58" title="Highlights" />
  68 +<A name="toc3-53" title="Highlights" />
75 69 ### Highlights
76 70
77   -* Single API hides differences between ØMQ/2.1, and ØMQ/3.0.
  71 +* Single API hides differences between ØMQ/2.1, and ØMQ/3.1.
78 72 * Work with messages as strings, individual frames, or multipart messages.
79 73 * Automatic closure of any open sockets at context termination.
80 74 * Automatic LINGER configuration of all sockets for context termination.
@@ -86,26 +80,24 @@ CZMQ grew out of concepts developed in [ØMQ - The Guide](http://zguide.zeromq.o
86 80 * Includes generic hash and list containers.
87 81 * Full selftests on all classes.
88 82
89   -<A name="toc3-73" title="Ownership and License" />
  83 +<A name="toc3-68" title="Ownership and License" />
90 84 ### Ownership and License
91 85
92 86 CZMQ is maintained by Pieter Hintjens and Mikko Koppanen (build system). Its other authors and contributors are listed in the AUTHORS file. It is held by the ZeroMQ organization at github.com.
93 87
94 88 The authors of CZMQ grant you use of this software under the terms of the GNU Lesser General Public License (LGPL). For details see the files `COPYING` and `COPYING.LESSER` in this directory.
95 89
96   -<A name="toc3-80" title="Contributing" />
  90 +<A name="toc3-75" title="Contributing" />
97 91 ### Contributing
98 92
99   -To submit an issue use the [issue tracker](https://zeromq.jira.com/browse/CZMQ). All discussion happens on the [zeromq-dev](zeromq-dev@lists.zeromq.org) list or #zeromq IRC channel at irc.freenode.net.
100   -
101   -The proper way to submit patches is to clone this repository, make your changes, and use git to create a patch or a pull request. See http://www.zeromq.org/docs:contributing. All contributors are listed in AUTHORS.
  93 +CZMQ uses the [C4 (Collective Code Construction Contract)](http://rfc.zeromq.org/spec:16) process which says, "Everyone, without distinction or discrimination, SHALL have an equal right to become a Contributor under the terms of this contract".
102 94
103   -The general rule is, if you contribute code to CZMQ you must be willing to maintain it as long as there are users of it. Code with no active maintainer will in general be deprecated and/or removed.
  95 +To report an issue, use the [CZMQ issue tracker](https://github.com/zeromq/czmq/issues) at github.com.
104 96
105   -<A name="toc2-89" title="Using CZMQ" />
  97 +<A name="toc2-82" title="Using CZMQ" />
106 98 ## Using CZMQ
107 99
108   -<A name="toc3-92" title="Building and Installing" />
  100 +<A name="toc3-85" title="Building and Installing" />
109 101 ### Building and Installing
110 102
111 103 CZMQ uses autotools for packaging. To build from git (all example commands are for Linux):
@@ -126,17 +118,17 @@ After building, you can run the CZMQ selftests:
126 118
127 119 make check
128 120
129   -<A name="toc3-113" title="Linking with an Application" />
  121 +<A name="toc3-106" title="Linking with an Application" />
130 122 ### Linking with an Application
131 123
132 124 Include `czmq.h` in your application and link with libczmq. Here is a typical gcc link command:
133 125
134 126 gcc -lczmq -lzmq myapp.c -o myapp
135 127
136   -<A name="toc3-120" title="API Summary" />
  128 +<A name="toc3-113" title="API Summary" />
137 129 ### API Summary
138 130
139   -<A name="toc4-123" title="zctx - working with ØMQ contexts" />
  131 +<A name="toc4-116" title="zctx - working with ØMQ contexts" />
140 132 #### zctx - working with ØMQ contexts
141 133
142 134 The zctx class wraps ØMQ contexts. It manages open sockets in the context
@@ -191,7 +183,7 @@ This is the class interface:
191 183 extern int zctx_interrupted;
192 184
193 185
194   -<A name="toc4-134" title="zsocket - working with ØMQ sockets" />
  186 +<A name="toc4-127" title="zsocket - working with ØMQ sockets" />
195 187 #### zsocket - working with ØMQ sockets
196 188
197 189 The zsocket class provides helper functions for ØMQ sockets. It doesn't
@@ -238,7 +230,7 @@ This is the class interface:
238 230 zsocket_test (Bool verbose);
239 231
240 232
241   -<A name="toc4-145" title="zsockopt - working with ØMQ socket options" />
  233 +<A name="toc4-138" title="zsockopt - working with ØMQ socket options" />
242 234 #### zsockopt - working with ØMQ socket options
243 235
244 236 The zsockopt class provides access to the ØMQ getsockopt/setsockopt API.
@@ -370,7 +362,7 @@ This class is generated, using the GSL code generator. See the sockopts
370 362 XML file, which provides the metadata, and the sockopts.gsl template,
371 363 which does the work.
372 364
373   -<A name="toc4-156" title="zstr - sending and receiving strings" />
  365 +<A name="toc4-149" title="zstr - sending and receiving strings" />
374 366 #### zstr - sending and receiving strings
375 367
376 368 The zstr class provides utility functions for sending and receiving C
@@ -409,7 +401,7 @@ This is the class interface:
409 401 zstr_test (Bool verbose);
410 402
411 403
412   -<A name="toc4-181" title="zfile - work with files" />
  404 +<A name="toc4-174" title="zfile - work with files" />
413 405 #### zfile - work with files
414 406
415 407 The zfile class provides methods to work with files.
@@ -437,7 +429,7 @@ This is the class interface:
437 429 zfile_test (Bool verbose);
438 430
439 431
440   -<A name="toc4-192" title="zframe - working with single message frames" />
  432 +<A name="toc4-185" title="zframe - working with single message frames" />
441 433 #### zframe - working with single message frames
442 434
443 435 The zframe class provides methods to send and receive single message
@@ -523,7 +515,7 @@ This is the class interface:
523 515 zframe_test (Bool verbose);
524 516
525 517
526   -<A name="toc4-203" title="zmsg - working with multipart messages" />
  518 +<A name="toc4-196" title="zmsg - working with multipart messages" />
527 519 #### zmsg - working with multipart messages
528 520
529 521 The zmsg class provides methods to send and receive multipart messages
@@ -650,7 +642,7 @@ This is the class interface:
650 642 zmsg_test (Bool verbose);
651 643
652 644
653   -<A name="toc4-214" title="zloop - event-driven reactor" />
  645 +<A name="toc4-207" title="zloop - event-driven reactor" />
654 646 #### zloop - event-driven reactor
655 647
656 648 The zloop class provides an event-driven reactor pattern. The reactor
@@ -711,7 +703,7 @@ This is the class interface:
711 703 zloop_test (Bool verbose);
712 704
713 705
714   -<A name="toc4-225" title="zthread - working with system threads" />
  706 +<A name="toc4-218" title="zthread - working with system threads" />
715 707 #### zthread - working with system threads
716 708
717 709 The zthread class wraps OS thread creation. It creates detached threads
@@ -770,7 +762,7 @@ more enriching experience for all involved. One thing I do often is use
770 762 a PAIR-PAIR pipe to talk from a thread to/from its parent. So this class
771 763 will automatically create such a pair for each thread you start.
772 764
773   -<A name="toc4-236" title="zhash - expandable hash table container" />
  765 +<A name="toc4-229" title="zhash - expandable hash table container" />
774 766 #### zhash - expandable hash table container
775 767
776 768 Expandable hash table container
@@ -842,7 +834,7 @@ Note that it's relatively slow (~50k insertions/deletes per second), so
842 834 don't do inserts/updates on the critical path for message I/O. It can
843 835 do ~2.5M lookups per second for 16-char keys. Timed on a 1.6GHz CPU.
844 836
845   -<A name="toc4-247" title="zlist - singly-linked list container" />
  837 +<A name="toc4-240" title="zlist - singly-linked list container" />
846 838 #### zlist - singly-linked list container
847 839
848 840 Provides a generic container implementing a fast singly-linked list. You
@@ -896,7 +888,7 @@ This is the class interface:
896 888 zlist_test (int verbose);
897 889
898 890
899   -<A name="toc4-258" title="zclock - millisecond clocks and delays" />
  891 +<A name="toc4-251" title="zclock - millisecond clocks and delays" />
900 892 #### zclock - millisecond clocks and delays
901 893
902 894 The zclock class provides essential sleep and system time functions, used
@@ -935,10 +927,10 @@ The Win32 Sleep() call defaults to 16ms resolution unless the system timer
935 927 resolution is increased with a call to timeBeginPeriod() permitting 1ms
936 928 granularity.
937 929
938   -<A name="toc2-269" title="Design Ideology" />
  930 +<A name="toc2-262" title="Design Ideology" />
939 931 ## Design Ideology
940 932
941   -<A name="toc3-272" title="The Problem with C" />
  933 +<A name="toc3-265" title="The Problem with C" />
942 934 ### The Problem with C
943 935
944 936 C has the significant advantage of being a small language that, if we take a little care with formatting and naming, can be easily interchanged between developers. Every C developer will use much the same 90% of the language. Larger languages like C++ provide powerful abstractions like STL containers but at the cost of interchange.
@@ -947,7 +939,7 @@ The huge problem with C is that any realistic application needs packages of func
947 939
948 940 The answer to this, as we learned from building enterprise-level C applications at iMatix from 1995-2005, is to create our own fully portable, high-quality libraries of pre-packaged functionality, in C. Doing this right solves both the requirements of richness of the language, and of portability of the final applications.
949 941
950   -<A name="toc3-281" title="A Simple Class Model" />
  942 +<A name="toc3-274" title="A Simple Class Model" />
951 943 ### A Simple Class Model
952 944
953 945 C has no standard API style. It is one thing to write a useful component, but something else to provide an API that is consistent and obvious across many components. We learned from building [OpenAMQ](http://www.openamq.org), a messaging client and server of 0.5M LoC, that a consistent model for extending C makes life for the application developer much easier.
@@ -974,7 +966,7 @@ No model is fully consistent, and classes can define their own rules if it helps
974 966
975 967 * While every class has a destroy method that is the formal destructor, some methods may also act as destructors. For example, a method that sends an object may also destroy the object (so that ownership of any buffers can passed to background threads). Such methods take the same "pointer to a reference" argument as the destroy method.
976 968
977   -<A name="toc3-308" title="Naming Style" />
  969 +<A name="toc3-301" title="Naming Style" />
978 970 ### Naming Style
979 971
980 972 CZMQ aims for short, consistent names, following the theory that names we use most often should be shortest. Classes get one-word names, unless they are part of a family of classes in which case they may be two words, the first being the family name. Methods, similarly, get one-word names and we aim for consistency across classes (so a method that does something semantically similar in two classes will get the same name in both). So the canonical name for any method is:
@@ -983,7 +975,7 @@ CZMQ aims for short, consistent names, following the theory that names we use mo
983 975
984 976 And the reader can easily parse this without needing special syntax to separate the class name from the method name.
985 977
986   -<A name="toc3-317" title="Containers" />
  978 +<A name="toc3-310" title="Containers" />
987 979 ### Containers
988 980
989 981 After a long experiment with containers, we've decided that we need exactly two containers:
@@ -995,7 +987,7 @@ These are zlist and zhash, respectively. Both store void pointers, with no attem
995 987
996 988 We assume that at some point we'll need to switch to a doubly-linked list.
997 989
998   -<A name="toc3-329" title="Portability" />
  990 +<A name="toc3-322" title="Portability" />
999 991 ### Portability
1000 992
1001 993 Creating a portable C application can be rewarding in terms of maintaining a single code base across many platforms, and keeping (expensive) system-specific knowledge separate from application developers. In most projects (like ØMQ core), there is no portability layer and application code does conditional compilation for all mixes of platforms. This leads to quite messy code.
@@ -1021,7 +1013,7 @@ An example of the last:
1021 1013
1022 1014 CZMQ uses the GNU autotools system, so non-portable code can use the macros this defines. It can also use macros defined by the czmq_prelude.h header file.
1023 1015
1024   -<A name="toc3-355" title="Technical Aspects" />
  1016 +<A name="toc3-348" title="Technical Aspects" />
1025 1017 ### Technical Aspects
1026 1018
1027 1019 * *Thread safety*: the use of opaque structures is thread safe, though ØMQ applications should not share state between threads in any case.
@@ -1031,10 +1023,10 @@ CZMQ uses the GNU autotools system, so non-portable code can use the macros this
1031 1023 * *Self-testing*: every class has a `selftest` method that runs through the methods of the class. In theory, calling all selftest functions of all classes does a full unit test of the library. The `czmq_selftest` application does this.
1032 1024 * *Memory management*: CZMQ classes do not use any special memory management techiques to detect leaks. We've done this in the past but it makes the code relatively complex. Instead, we do memory leak testing using tools like valgrind.
1033 1025
1034   -<A name="toc2-365" title="Under the Hood" />
  1026 +<A name="toc2-358" title="Under the Hood" />
1035 1027 ## Under the Hood
1036 1028
1037   -<A name="toc3-368" title="Adding a New Class" />
  1029 +<A name="toc3-361" title="Adding a New Class" />
1038 1030 ### Adding a New Class
1039 1031
1040 1032 If you define a new CZMQ class `myclass` you need to:
@@ -1047,7 +1039,7 @@ If you define a new CZMQ class `myclass` you need to:
1047 1039
1048 1040 The `bin/newclass.sh` shell script will automate these steps for you.
1049 1041
1050   -<A name="toc3-381" title="Coding Style" />
  1042 +<A name="toc3-374" title="Coding Style" />
1051 1043 ### Coding Style
1052 1044
1053 1045 In general the zctx class defines the style for the whole library. The overriding rules for coding style are consistency, clarity, and ease of maintenance. We use the C99 standard for syntax including principally:
@@ -1066,7 +1058,7 @@ The style in CZMQ would be:
1066 1058
1067 1059 zblob_t *file_buffer = zblob_new ();
1068 1060
1069   -<A name="toc3-400" title="Assertions" />
  1061 +<A name="toc3-393" title="Assertions" />
1070 1062 ### Assertions
1071 1063
1072 1064 We use assertions heavily to catch bad argument values. The CZMQ classes do not attempt to validate arguments and report errors; bad arguments are treated as fatal application programming errors.
@@ -1084,7 +1076,7 @@ Rather than the side-effect form:
1084 1076
1085 1077 Since assertions may be removed by an optimizing compiler.
1086 1078
1087   -<A name="toc3-418" title="Documentation" />
  1079 +<A name="toc3-411" title="Documentation" />
1088 1080 ### Documentation
1089 1081
1090 1082 Man pages are generated from the class header and source files via the doc/mkman tool, and similar functionality in the gitdown tool (http://github.com/imatix/gitdown). The header file for a class must wrap its interface as follows (example is from include/zclock.h):
@@ -1123,7 +1115,7 @@ The source file for a class then provides the self test example as follows:
1123 1115
1124 1116 The template for man pages is in doc/mkman.
1125 1117
1126   -<A name="toc3-457" title="Development" />
  1118 +<A name="toc3-450" title="Development" />
1127 1119 ### Development
1128 1120
1129 1121 CZMQ is developed through a test-driven process that guarantees no memory violations or leaks in the code:
@@ -1133,7 +1125,7 @@ CZMQ is developed through a test-driven process that guarantees no memory violat
1133 1125 * Run the 'selftest' script, which uses the Valgrind memcheck tool.
1134 1126 * Repeat until perfect.
1135 1127
1136   -<A name="toc3-467" title="Porting CZMQ" />
  1128 +<A name="toc3-460" title="Porting CZMQ" />
1137 1129 ### Porting CZMQ
1138 1130
1139 1131 When you try CZMQ on an OS that it's not been used on (ever, or for a while), you will hit code that does not compile. In some cases the patches are trivial, in other cases (usually when porting to Windows), the work needed to build equivalent functionality may be non-trivial. In any case, the benefit is that once ported, the functionality is available to all applications.
@@ -1146,16 +1138,16 @@ Before attempting to patch code for portability, please read the `czmq_prelude.h
1146 1138
1147 1139 The canonical 'standard operating system' for all CZMQ code is Linux, gcc, POSIX. The canonical 'weird operating system' for CZMQ is Windows.
1148 1140
1149   -<A name="toc3-480" title="Code Generation" />
  1141 +<A name="toc3-473" title="Code Generation" />
1150 1142 ### Code Generation
1151 1143
1152   -We generate the zsockopt class using the mysterious but powerful GSL code generator. It's actually really cool, since about 30 lines of XML are sufficient to generate 700 lines of code. Better, since many of the option data types changed in ØMQ/3.0, it's possible to completely hide the differences. To regenerate the zsockopt class, build and install GSL from https://github.com/imatix/gsl, and then:
  1144 +We generate the zsockopt class using the mysterious but powerful GSL code generator. It's actually cool, since about 30 lines of XML are sufficient to generate 700 lines of code. Better, since many of the option data types changed in ØMQ/3.1, it's possible to completely hide the differences. To regenerate the zsockopt class, build and install GSL from https://github.com/imatix/gsl, and then:
1153 1145
1154 1146 gsl sockopts
1155 1147
1156 1148 You may also enjoy using this same technique if you're writing bindings in other languages. See the sockopts.gsl file, this can be easily modified to produce code in whatever language interests you.
1157 1149
1158   -<A name="toc3-489" title="This Document" />
  1150 +<A name="toc3-482" title="This Document" />
1159 1151 ### This Document
1160 1152
1161 1153 This document is originally at README.txt and is built using [gitdown](http://github.com/imatix/gitdown).
16 README.txt
@@ -9,16 +9,12 @@
9 9
10 10 ## Overview
11 11
12   -### To report an Issue
13   -
14   -[Use the issue tracker.](https://zeromq.jira.com/browse/CZMQ)
15   -
16 12 ### Scope and Goals
17 13
18 14 CZMQ has these goals:
19 15
20 16 * To wrap the 0MQ core API in semantics that are natural and lead to shorter, more readable applications.
21   -* To hide the differences between versions of 0MQ, particularly 2.1 and 3.0.
  17 +* To hide the differences between versions of 0MQ, particularly 2.1 and 3.1.
22 18 * To provide a space for development of more sophisticated API semantics.
23 19
24 20 CZMQ grew out of concepts developed in [ØMQ - The Guide](http://zguide.zeromq.org) and [ZFL](http://zfl.zeromq.org). Until end-April 2011, CZMQ was known as *libzapi*.
@@ -53,7 +49,7 @@ CZMQ grew out of concepts developed in [ØMQ - The Guide](http://zguide.zeromq.o
53 49
54 50 ### Highlights
55 51
56   -* Single API hides differences between 0MQ/2.1, and 0MQ/3.0.
  52 +* Single API hides differences between 0MQ/2.1, and 0MQ/3.1.
57 53 * Work with messages as strings, individual frames, or multipart messages.
58 54 * Automatic closure of any open sockets at context termination.
59 55 * Automatic LINGER configuration of all sockets for context termination.
@@ -73,11 +69,9 @@ The authors of CZMQ grant you use of this software under the terms of the GNU Le
73 69
74 70 ### Contributing
75 71
76   -To submit an issue use the [issue tracker](https://zeromq.jira.com/browse/CZMQ). All discussion happens on the [zeromq-dev](zeromq-dev@lists.zeromq.org) list or #zeromq IRC channel at irc.freenode.net.
77   -
78   -The proper way to submit patches is to clone this repository, make your changes, and use git to create a patch or a pull request. See http://www.zeromq.org/docs:contributing. All contributors are listed in AUTHORS.
  72 +CZMQ uses the [C4 (Collective Code Construction Contract)](http://rfc.zeromq.org/spec:16) process which says, "Everyone, without distinction or discrimination, SHALL have an equal right to become a Contributor under the terms of this contract".
79 73
80   -The general rule is, if you contribute code to CZMQ you must be willing to maintain it as long as there are users of it. Code with no active maintainer will in general be deprecated and/or removed.
  74 +To report an issue, use the [CZMQ issue tracker](https://github.com/zeromq/czmq/issues) at github.com.
81 75
82 76 ## Using CZMQ
83 77
@@ -442,7 +436,7 @@ The canonical 'standard operating system' for all CZMQ code is Linux, gcc, POSIX
442 436
443 437 ### Code Generation
444 438
445   -We generate the zsockopt class using the mysterious but powerful GSL code generator. It's actually really cool, since about 30 lines of XML are sufficient to generate 700 lines of code. Better, since many of the option data types changed in 0MQ/3.0, it's possible to completely hide the differences. To regenerate the zsockopt class, build and install GSL from https://github.com/imatix/gsl, and then:
  439 +We generate the zsockopt class using the mysterious but powerful GSL code generator. It's actually cool, since about 30 lines of XML are sufficient to generate 700 lines of code. Better, since many of the option data types changed in 0MQ/3.1, it's possible to completely hide the differences. To regenerate the zsockopt class, build and install GSL from https://github.com/imatix/gsl, and then:
446 440
447 441 gsl sockopts
448 442
BIN  images/README_1.png
BIN  images/README_2.png

0 comments on commit 46ba941

Please sign in to comment.
Something went wrong with that request. Please try again.