  
  [1X2 [33X[0;0YZeroMQ Bindings[133X[101X
  
  [33X[0;0YThere   are   experimental   bindings   to   the  ZeroMQ  library  available
  [7Xhttp://www.zeromq.net/[107X.  This  section describes these bindings. Messages in
  ZeroMQ  are  sent between endpoints called [13Xsockets[113X. Each socket can be [13Xbound[113X
  to  an  address specified by a URI and other sockets can [13Xconnect[113X to the same
  address to exchange messages with that socket.[133X
  
  
  [1X2.1 [33X[0;0YAddresses, transports, and URIs[133X[101X
  
  [33X[0;0YAddresses  are  specified  as URIs of one of four different types (TCP, IPC,
  in-process, PGM/EPGM), each for a different type of transport.[133X
  
  
  [1X2.1-1 [33X[0;0YThe TCP transport[133X[101X
  
  [33X[0;0YTCP  URIs  map  to  POSIX  TCP  stream  sockets.  The  URI  is  of  the form
  [10Xtcp://<address>:<port>[110X  or  [10Xtcp://*:<port>[110X.  Here,  [10Xaddress[110X  is  an internet
  address,  either  an  IP address or a symbolic address (note that to resolve
  symbolic  addresses,  the library may have to consult DNS servers, which can
  take  an indefinite amount of time or even fail). Port is a TCP port number.
  If  a  [21X*[121X  is  given  instead  of  an  address,  this describes the so-called
  unspecified  address;  the  URI  can  only be used for binding and will then
  accept incoming connections from all interfaces (as in binding to [21X0.0.0.0[121X in
  IPv4 or [21X::[121X in IPv6).[133X
  
  
  [1X2.1-2 [33X[0;0YThe IPC transport[133X[101X
  
  [33X[0;0YThe  URI for IPC communication is of the form [10Xipc://<path>[110X, where [10Xpath[110X is an
  actual  path on the file system. Binding to such a URI will create a file in
  that location.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xsocket := ZmqDealerSocket();;[127X[104X
    [4X[25Xgap>[125X [27XZmqBind(socket, "ipc:///tmp/connector");[127X[104X
  [4X[32X[104X
  
  
  [1X2.1-3 [33X[0;0YThe in-process transport[133X[101X
  
  [33X[0;0YThe  in-process transport is used to communicate between threads in order to
  avoid  the  overhead  of  operating  system calls. Messages are simply being
  copied  from  one thread's memory to the other's. In-process URIs are of the
  form [10Xinproc://<string>[110X, where [10Xstring[110X is an arbitrary string.[133X
  
  
  [1X2.2 [33X[0;0YCreating and closing sockets[133X[101X
  
  [33X[0;0YSockets are generally being created via calls to [2XZmqPushSocket[102X ([14X2.2-1[114X), etc.
  Each such call takes two optional arguments, a URI and an identity. If a URI
  is given, a call to [2XZmqAttach[102X ([14X2.3-3[114X) will be performed immediately with the
  socket  and  URI.  In particular, if the URI is prefixed with a [21X+[121X character,
  then  the socket will connect to the address specified by the part after the
  [21X+[121X character; otherwise, it will be bound to the URI.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xz := ZmqPushSocket("inproc://test");  # binds to inproc://test[127X[104X
    [4X[25Xgap>[125X [27Xz := ZmqPushSocket("+inproc://test"); # connects to inproc://test[127X[104X
  [4X[32X[104X
  
  [33X[0;0YIf  an  identity  is  also  provided,  the  library will call [2XZmqSetIdentity[102X
  ([14X2.5-1[114X)  to  set  the  identity  (name)  for  that  socket.  For  a  precise
  description of the behavior of each socket type, please consult the original
  ZeroMQ documentation for [10Xzmq_socket()[110X.[133X
  
  [1X2.2-1 ZmqPushSocket[101X
  
  [33X[1;0Y[29X[2XZmqPushSocket[102X( [[3Xuri[103X[, [3Xidentity[103X]] ) [32X function[133X
  
  [33X[0;0YA  push  socket  is  one  end  of  a  unidirectional pipe. Programs can send
  messages  to  it,  which  will  be delivered to a matched pull socket at the
  other end.[133X
  
  [1X2.2-2 ZmqPullSocket[101X
  
  [33X[1;0Y[29X[2XZmqPullSocket[102X( [[3Xuri[103X[, [3Xidentity[103X]] ) [32X function[133X
  
  [33X[0;0YA pull socket is the other end of a unidirectional pipe.[133X
  
  [1X2.2-3 ZmqReplySocket[101X
  
  [33X[1;0Y[29X[2XZmqReplySocket[102X( [[3Xuri[103X[, [3Xidentity[103X]] ) [32X function[133X
  
  [33X[0;0YA  reply  socket  provides  the  server  side  of  a  remote-procedure  call
  interaction. It alternates between receiving a message and sending a message
  to  the  socket  from which the previous one originated. Deviating from that
  protocol  (for  example,  by sending two messages in succession or receiving
  two without responding to the first) will result in an error.[133X
  
  [1X2.2-4 ZmqRequestSocket[101X
  
  [33X[1;0Y[29X[2XZmqRequestSocket[102X( [[3Xuri[103X[, [3Xidentity[103X]] ) [32X function[133X
  
  [33X[0;0YA  request  socket  provides  the  client  side  of  a remote-procedure call
  interaction.  It  will  alternate  between  sending a message to a connected
  reply socket and receiving the response.[133X
  
  [1X2.2-5 ZmqPublisherSocket[101X
  
  [33X[1;0Y[29X[2XZmqPublisherSocket[102X( [[3Xuri[103X[, [3Xidentity[103X]] ) [32X function[133X
  
  [33X[0;0YA publisher socket is a unidirectional broadcast facility. It will send each
  outgoing message to all connected subscriber sockets.[133X
  
  [1X2.2-6 ZmqSubscriberSocket[101X
  
  [33X[1;0Y[29X[2XZmqSubscriberSocket[102X( [[3Xuri[103X[, [3Xidentity[103X]] ) [32X function[133X
  
  [33X[0;0YA  subscriber  socket  receives  messages  from  a  publisher socket. It can
  subscribe  to  only  a  specific  subseet  of messages (see the [2XZmqSubscribe[102X
  ([14X2.5-11[114X) function) or receive all of them.[133X
  
  [1X2.2-7 ZmqDealerSocket[101X
  
  [33X[1;0Y[29X[2XZmqDealerSocket[102X( [[3Xuri[103X[, [3Xidentity[103X]] ) [32X function[133X
  
  [33X[0;0YA  dealer socket is a bidirectional socket. One or more peers can connect to
  it.  Outgoing  messages will be sent to those peers in a round-robin fashion
  (i.e.,  the  first  message goes to the first peer, the second to the second
  peer,  and  so forth until all peers have received a message and the process
  begins  anew  with  the first peer). Incoming messages will be received from
  all peers and processed fairly (i.e., no message will be held indefinitely).
  Two dealer sockets can be used to create a bidirectional pipe.[133X
  
  [1X2.2-8 ZmqRouterSocket[101X
  
  [33X[1;0Y[29X[2XZmqRouterSocket[102X( [[3Xuri[103X[, [3Xidentity[103X]] ) [32X function[133X
  
  [33X[0;0YRouter  sockets,  like  dealer sockets, can have multiple peers connected to
  them.  Incoming  messages  are  handled  the same way as for dealer sockets.
  Outgoing messages should be multi-part messages, where the first part of the
  message  is  the identity of one of the peers. The message will then be sent
  only  to the peer with that identity. Peers can be dealer, request, or reply
  sockets.[133X
  
  [1X2.2-9 ZmqSocket[101X
  
  [33X[1;0Y[29X[2XZmqSocket[102X( [3Xtype[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqSocket[110X  is  a  low-level  function  that is used by [10XZmqPushSocket[110X etc. to
  create  sockets. Its argument is a string, one of [21XPUSH[121X, [21XPULL[121X, [21XREP[121X, [21XREQ[121X, [21XPUB[121X,
  [21XSUB[121X, [21XDEALER[121X, [21XROUTER[121X, and it creates and returns a socket of that type.[133X
  
  [1X2.2-10 ZmqClose[101X
  
  [33X[1;0Y[29X[2XZmqClose[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqClose[110X  closes [10Xsocket[110X. Afterwards, it cannot anymore be bound or connected
  to,  nor receive or send messages. Messages already in transit will still be
  delivered.[133X
  
  [1X2.2-11 ZmqIsOpen[101X
  
  [33X[1;0Y[29X[2XZmqIsOpen[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqIsOpen[110X returns true if [10Xsocket[110X has not been closed yet, false otherwise.[133X
  
  [1X2.2-12 ZmqSocketType[101X
  
  [33X[1;0Y[29X[2XZmqSocketType[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqSocketType[110X  returns  the  string  with  which the socket was created (see
  [2XZmqSocket[102X ([14X2.2-9[114X)).[133X
  
  
  [1X2.3 [33X[0;0YBinding and connecting sockets to addresses[133X[101X
  
  [1X2.3-1 ZmqBind[101X
  
  [33X[1;0Y[29X[2XZmqBind[102X( [3Xsocket[103X, [3Xuri[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqBind[110X  will [13Xbind[113X [10Xsocket[110X to [10Xuri[110X. After being bound to the address specified
  by  [10Xuri[110X,  the  socket  can  be  connected to at that address with [2XZmqConnect[102X
  ([14X2.3-2[114X).[133X
  
  [1X2.3-2 ZmqConnect[101X
  
  [33X[1;0Y[29X[2XZmqConnect[102X( [3Xsocket[103X, [3Xuri[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqConnect[110X  is  used to connect [10Xsocket[110X to another socket that has been bound
  to [10Xuri[110X. Note that you can connect to an address that has not been bound yet;
  in that case, the connection will be delayed until the binding has occurred.[133X
  
  [1X2.3-3 ZmqAttach[101X
  
  [33X[1;0Y[29X[2XZmqAttach[102X( [3Xsocket[103X, [3Xuri[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqAttach[110X is a unified interface for binding and connecting a socket. If [10Xuri[110X
  begins  with  a  [21X+[121X character, then the [2XZmqConnect[102X ([14X2.3-2[114X) is called with the
  socket  and  the  rest of the [10Xuri[110X string following the [21X+[121X. Otherwise, [2XZmqBind[102X
  ([14X2.3-1[114X)  is  called with these arguments. The intended use is to construct a
  network of connections from a list of strings.[133X
  
  [1X2.3-4 ZmqSocketURI[101X
  
  [33X[1;0Y[29X[2XZmqSocketURI[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqSocketURI[110X  returns  the most recent URI to which [10Xsocket[110X has been bound or
  connected.  Sockets  can be bound to or connected to multiple addresses, but
  only the most recent one is returned.[133X
  
  [1X2.3-5 ZmqIsBound[101X
  
  [33X[1;0Y[29X[2XZmqIsBound[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqIsBound[110X returns true if the socket has been bound to the address returned
  by [10XZmqSocketURI()[110X, false otherwise.[133X
  
  [1X2.3-6 ZmqIsConnected[101X
  
  [33X[1;0Y[29X[2XZmqIsConnected[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqIsBound[110X  returns  true  if  the  socket has been connected to the address
  returned by [10XZmqSocketURI()[110X, false otherwise.[133X
  
  
  [1X2.4 [33X[0;0YSending and receiving messages[133X[101X
  
  [33X[0;0YZeroMQ  allows  the  sending  and  receiving  of  both  string  messages and
  multi-part  messages.  String  messages  are  sequences  of bytes (which can
  include zero), provided as a GAP string, while multi-part messages are lists
  of  strings,  provided  as  a  GAP  list.  Multi-part messages are largely a
  convenience  feature  (e.g., to allow a message to have header parts without
  the  inconvenience of having to encode those in a single string). When sent,
  multi-part  messages  will  be  delivered  in  their  entirety;  they can be
  retrieved  one  part at a time, but if the first part is available, the last
  part is available also.[133X
  
  [1X2.4-1 ZmqSend[101X
  
  [33X[1;0Y[29X[2XZmqSend[102X( [3Xsocket[103X, [3Xdata[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqSend[110X  will  send [10Xdata[110X to [10Xsocket[110X, according to the routing behavior of the
  underlying socket mechanism.[133X
  
  [1X2.4-2 ZmqReceive[101X
  
  [33X[1;0Y[29X[2XZmqReceive[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqReceive[110X  will  either  retrieve  a  string  message or a single part of a
  multi-part message from [10Xsocket[110X and return the result as a GAP string.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xz := ZmqSocket("inproc://test");;[127X[104X
    [4X[25Xgap>[125X [27Xz2 := ZmqSocket("+inproc://test");;[127X[104X
    [4X[25Xgap>[125X [27XZmqSend(z, "notice");[127X[104X
    [4X[25Xgap>[125X [27XZmqReceive(z2);[127X[104X
    [4X[28X"notice"[128X[104X
    [4X[25Xgap>[125X [27XZmqSend(z, ["alpha", "beta"]);[127X[104X
    [4X[25Xgap>[125X [27XZmqReceive(z2);[127X[104X
    [4X[28X"alpha"[128X[104X
    [4X[25Xgap>[125X [27XZmqReceive(z2);[127X[104X
    [4X[28X"beta"[128X[104X
  [4X[32X[104X
  
  [1X2.4-3 ZmqReceiveList[101X
  
  [33X[1;0Y[29X[2XZmqReceiveList[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqReceiveList[110X  will  retrieve  a  message  in  its entirety from [10Xsocket[110X and
  return the result as a list of strings.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xz := ZmqPushSocket("inproc://test");;[127X[104X
    [4X[25Xgap>[125X [27Xz2 := ZmqPullSocket("+inproc://test");;[127X[104X
    [4X[25Xgap>[125X [27XZmqSend(z, "notice");[127X[104X
    [4X[25Xgap>[125X [27XZmqReceiveList(z2);[127X[104X
    [4X[28X[ "notice" ][128X[104X
    [4X[25Xgap>[125X [27XZmqSend(z, ["alpha", "beta"]);[127X[104X
    [4X[25Xgap>[125X [27XZmqReceiveList(z2);[127X[104X
    [4X[28X[ "alpha", "beta" ][128X[104X
  [4X[32X[104X
  
  [1X2.4-4 ZmqReceiveListAsString[101X
  
  [33X[1;0Y[29X[2XZmqReceiveListAsString[102X( [3Xsocket[103X, [3Xseparator[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqReceiveListAsString[110X works like [10XZmqReceiveList[110X, but will return the result
  a single string, with multiple parts separated by [10Xseparator[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xz := ZmqPushSocket("inproc://test");;[127X[104X
    [4X[25Xgap>[125X [27Xz2 := ZmqPullSocket("+inproc://test");;[127X[104X
    [4X[25Xgap>[125X [27XZmqSend(z, "notice");[127X[104X
    [4X[25Xgap>[125X [27XZmqReceiveListAsString(z2, "::");[127X[104X
    [4X[28X"notice"[128X[104X
    [4X[25Xgap>[125X [27XZmqSend(z, ["alpha", "beta"]);[127X[104X
    [4X[25Xgap>[125X [27XZmqReceiveListAsString(z2, "::");[127X[104X
    [4X[28X"alpha::beta"[128X[104X
  [4X[32X[104X
  
  [1X2.4-5 ZmqHasMore[101X
  
  [33X[1;0Y[29X[2XZmqHasMore[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqHasMore[110X will return [10Xtrue[110X if a socket has one or more remaining parts of a
  multi-part message outstanding, [10Xfalse[110X otherwise.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xz := ZmqPushSocket("inproc://test");;[127X[104X
    [4X[25Xgap>[125X [27Xz2 := ZmqPullSocket("+inproc://test");;[127X[104X
    [4X[25Xgap>[125X [27XZmqSend(z, "notice");[127X[104X
    [4X[25Xgap>[125X [27XZmqReceive(z2);[127X[104X
    [4X[28X"notice"[128X[104X
    [4X[25Xgap>[125X [27XZmqHasMore(z2);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XZmqSend(z, ["alpha", "beta"]);[127X[104X
    [4X[25Xgap>[125X [27XZmqReceive(z2);[127X[104X
    [4X[28X"alpha"[128X[104X
    [4X[25Xgap>[125X [27XZmqHasMore(z2);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XZmqReceive(z2);[127X[104X
    [4X[28X"beta"[128X[104X
    [4X[25Xgap>[125X [27XZmqHasMore(z2);[127X[104X
    [4X[28Xfalse[128X[104X
  [4X[32X[104X
  
  [1X2.4-6 ZmqPoll[101X
  
  [33X[1;0Y[29X[2XZmqPoll[102X( [3Xinputs[103X, [3Xoutputs[103X, [3Xtimeout[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqPoll[110X  is  a facility to determine if messages can be received from one of
  the  sockets  listed  in  [10Xinputs[110X  or  sent  to  one of the sockets listed in
  [10Xoutputs[110X.  It  returns a list of indices describing the sockets that at least
  one  message  can be received from or sent to. The timeout is an integer. If
  positive,  it  describes  a  duration  (in milliseconds) after which it will
  return. If zero, the function will return immediately. If it is [10X-1[110X, then the
  function will block indefinitely until at least one message can be retrieved
  from one of the sockets in [10Xinputs[110X or at least one message can be sent to one
  of the sockets in [10Xoutputs[110X. If the timeout is non-negative, the result can be
  the empty list. It is guaranteed to have at least one element otherwise. The
  indices  in  the result are in the range [10X[1..Length(inputs)+Length(outputs)[110X.
  An  index  [10Xi[110X  less  than  or  equal  to  [10XLength(inputs)[110X refers to the socket
  [10Xinputs[i][110X.        An        index        [10Xj[110X        in        the        range
  [10X[Length(inputs)+1..Length(inputs)+Length(outputs)[110X   refers   to  the  socket
  [10Xoutputs[j-Length(inputs)][110X.  Multiple  indices  are listed in ascending order
  (i.e., they form a GAP set).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xsend1 := ZmqPushSocket("inproc://#1");;[127X[104X
    [4X[25Xgap>[125X [27Xrecv1 := ZmqPullSocket("+inproc://#1");;[127X[104X
    [4X[25Xgap>[125X [27Xsend2 := ZmqPushSocket();;[127X[104X
    [4X[25Xgap>[125X [27Xrecv2 := ZmqPullSocket();;[127X[104X
    [4X[25Xgap>[125X [27XZmqSetSendCapacity(send2, 1);[127X[104X
    [4X[25Xgap>[125X [27XZmqSetReceiveCapacity(recv2, 1);[127X[104X
    [4X[25Xgap>[125X [27XZmqBind(send2, "inproc://#2");[127X[104X
    [4X[25Xgap>[125X [27XZmqConnect(recv2, "inproc://#2");[127X[104X
    [4X[25Xgap>[125X [27XZmqSend(send2, "alpha");[127X[104X
    [4X[25Xgap>[125X [27XZmqSend(send2, "beta");[127X[104X
    [4X[25Xgap>[125X [27XZmqPoll([recv1, recv2], [send1, send2], 0);[127X[104X
    [4X[28X[ 2, 3 ][128X[104X
  [4X[32X[104X
  
  [33X[0;0YIn  the  example  above,  the code constructs sockets [10Xsend2[110X and [10Xrecv2[110X with a
  capacity  to  store at most one outgoing and incoming message, respectively.
  Then  the  code  sends  two  messages  to [10Xsend2[110X, one of which will be in the
  incoming  buffer  of [10Xrecv2[110X, and the other will remain in the outgoing buffer
  of  [10Xsend2[110X. At this point, no more messages can be sent to [10Xsend2[110X, because its
  outgoing  buffer  is  at  capacity,  and  [10Xrecv2[110X  has  a  message that can be
  received.  Conversely,  [10Xsend1[110X  can still accept outgoing messages, and [10Xrecv1[110X
  has  no messages. Thus, the result is the list [10X[2, 3][110X. The [10X2[110X refers to [10Xrecv2[110X
  (as  the  second  socket in the list of inputs), while [10X3[110X refers to [10Xsend1[110X (as
  the first socket in the list of outputs).[133X
  
  
  [1X2.5 [33X[0;0YSetting and querying socket properties[133X[101X
  
  [33X[0;0YSockets  have  properties  that can be set and queried. Most such properties
  only  affect binds and connects that occur after they have been set. Binding
  or connecting a socket first and then setting a property will not change the
  behavior of the socket.[133X
  
  [1X2.5-1 ZmqSetIdentity[101X
  
  [33X[1;0Y[29X[2XZmqSetIdentity[102X( [3Xsocket[103X, [3Xstring[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqSetIdentity[110X  can be used to give the socket an identity. An identity is a
  string  of  up to 255 characters that should not start with a null character
  (the  null  character is reserved for internal use). This identity should be
  globally unique. Uniqueness is not enforced, however, and undefined behavior
  may result from different sockets with the same identity interacting.[133X
  
  [1X2.5-2 ZmqGetIdentity[101X
  
  [33X[1;0Y[29X[2XZmqGetIdentity[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqGetIdentity[110X returns the current identity of the socket.[133X
  
  [1X2.5-3 ZmqSetSendCapacity[101X
  
  [33X[1;0Y[29X[2XZmqSetSendCapacity[102X( [3Xsocket[103X, [3Xvalue[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqSetSendCapacity[110X  sets  the  maximum  number of messages that a socket can
  store in its outgoing buffer.[133X
  
  [1X2.5-4 ZmqSetReceiveCapacity[101X
  
  [33X[1;0Y[29X[2XZmqSetReceiveCapacity[102X( [3Xsocket[103X, [3Xvalue[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqSetReceiveCapacity[110X  sets the maximum number of messages that a socket can
  store in its outgoing buffer.[133X
  
  [1X2.5-5 ZmqGetSendCapacity[101X
  
  [33X[1;0Y[29X[2XZmqGetSendCapacity[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqGetSendCapacity[110X  returns the maximum number of messages that a socket can
  store in its outgoing buffer.[133X
  
  [1X2.5-6 ZmqGetReceiveCapacity[101X
  
  [33X[1;0Y[29X[2XZmqGetReceiveCapacity[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqGetReceiveCapacity[110X  returns  the maximum number of messages that a socket
  can store in its incoming buffer.[133X
  
  [1X2.5-7 ZmqSetSendBufferSize[101X
  
  [33X[1;0Y[29X[2XZmqSetSendBufferSize[102X( [3Xsocket[103X, [3Xsize[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqSetSendBufferSize[110X  sets  the  size of the transmission buffer used by the
  underlying operating system structure for sending data.[133X
  
  [1X2.5-8 ZmqGetSendBufferSize[101X
  
  [33X[1;0Y[29X[2XZmqGetSendBufferSize[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqGetSendBufferSize[110X returns the size of the transmission buffer used by the
  underlying operating system structure for sending data.[133X
  
  [1X2.5-9 ZmqSetReceiveBufferSize[101X
  
  [33X[1;0Y[29X[2XZmqSetReceiveBufferSize[102X( [3Xsocket[103X, [3Xsize[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqSetReceiveBufferSize[110X sets the size of the transmission buffer used by the
  underlying operating system structure for receiving data.[133X
  
  [1X2.5-10 ZmqGetReceiveBufferSize[101X
  
  [33X[1;0Y[29X[2XZmqGetReceiveBufferSize[102X( [3Xsocket[103X ) [32X function[133X
  
  [33X[0;0Y[10XZmqGetReceiveBufferSize[110X  returns the size of the transmission buffer used by
  the underlying operating system structure for receiving data.[133X
  
  [1X2.5-11 ZmqSubscribe[101X
  
  [33X[1;0Y[29X[2XZmqSubscribe[102X( [3Xsocket[103X, [3Xprefix[103X ) [32X function[133X
  
  [33X[0;0YThe  [10XZmqSubscribe[110X  function  can  only be used for Subscriber sockets. After
  calling  it,  only  messages that begin with the given prefix string will be
  received  by  the  subscriber.  All  others  will be silently discarded. The
  function can be used multiple times, and then all messages that match any of
  the prefixes will be received.[133X
  
  [1X2.5-12 ZmqUnsubscribe[101X
  
  [33X[1;0Y[29X[2XZmqUnsubscribe[102X( [3Xsocket[103X, [3Xprefix[103X ) [32X function[133X
  
  [33X[0;0YThe  [10XZmqUnsubscribe[110X  function  removes  the  given  prefix  string  from the
  socket's subscription list.[133X
  
