diff options
Diffstat (limited to 'man/man7')
-rw-r--r-- | man/man7/zmq_cl.7 | 121 |
1 files changed, 118 insertions, 3 deletions
diff --git a/man/man7/zmq_cl.7 b/man/man7/zmq_cl.7 index 8dfa032..b9dd14f 100644 --- a/man/man7/zmq_cl.7 +++ b/man/man7/zmq_cl.7 @@ -2,8 +2,123 @@ .SH NAME Common Lisp API for 0MQ lightweight messaging kernel .SH SYNOPSIS -.SH DESCRIPTION + +This manual page explains how Common Lisp API maps to underlying C +API. + +Common Lisp API repeats C API in general. All constants defined with C +API are available with Common Lisp API. C names are mapped to lisp +names by these rules: a) all names are `zmq' namespace; b) all names +are in lower case; c) underscores translate to dashes. + +Example of mappings: + +.IR zmq_msg_init_data +maps to +.IR zmq:msg-init-data + +.IR ZMQ_PUB +maps to +.IR zmq:pub + +To learn about individual functions and parameters check +appropriate C API manual pages. + +For example, to understand +.IR zmq:setsockopt +function check +.BR zmq_setsockopt(3) . + +.SH Data structures +Data structures are wrapped into CLOS classes with automatic memory +management. 0MQ describes two such structures: +.IR msg_t +and +.IR pollitem_t . + +Message constructor supports keywords +.IR :size +and +.IR :data. +Keyword :size specifies the size of +message. Keyword :data specifies initial contents of message, and it +can be either string or 8-bit array. For example: + +* (make-instance 'zmq:msg :data #(1 2 3)) + +creates a message with 3 bytes '1, 2, 3' in it. + +.SH Accessing message data + +There 3 functions to read message body in different forms: +msg-data-as-string, msg-data-as-array and msg-data-as-is, returning +data as string, as array and as raw foreign pointer to underlaying +buffer respectively. For example: + +* (zmq:msg-data-as-array msg) + +returns #(1 2 3) for message from previous example. + +It is possible to access underlying foreign object via class slot +named `raw'. + +* (slot-value obj 'zmq:raw) + +or, if `obj' is of known type `msg': + +* (zmq:msg-raw obj) + +.SH Macros +There are several macroses to help with managing zeromq objects: + +.SH with-context +Macro +.IR with-context +creates 0MQ context and requires 3 obligatory arguments: context name, +number of application threads and number of input/output +threads. Optional parameter `flags' can be also supplied, see +.BR zmq_init(3) . +Context is terminated implicitly at the end of macro block. + +.SH with-socket +Macro +.IR with-socket +creates 0MQ socket within given context. Requires 3 arguments: socket +name, context name and socket type. See +.BR zmq_socket(3) . +Socket is closed implicitly at the end of macro block. + +.SH with-polls +Macro +.IR with-polls +creates 0MQ polls, containing different sets of pollitems. For +example, to create two poll sets for network pipes: + +* (zmq:with-polls ((poll1 . ((sock1 . zmq:pollin) + (sock2 . zmq:pollout))) + (poll2 . ((sock1 . zmq:pollout) + (sock2 . zmq:pollin)))) + + (process-sockets (zmq:poll poll-set1)) + + (process-sockets (zmq:poll poll-set2))) + +Note, +.IR zmq:poll +returns list of revents for sockets from given poll set. + +Polls are closed implicitly at the end of macro block. + +.SH EXAMPLE +.nf + +(zmq::with-context (ctx 1 1) + (zmq:with-socket (s ctx zmq:pub) + (zmq:connect s "tcp://192.168.0.115:5555") + (zmq:send s (make-instance 'zmq:msg :data "Hello, world!")))) + .SH "SEE ALSO" +.BR zmq(7) .SH AUTHOR -Martin Sustrik <sustrik at 250bpm dot com> - +Martin Sustrik <sustrik at 250bpm dot com>, +Vitaly Mayatskikh <v dot mayatskih at gmail dot com> |