Hex Artifact Content
Not logged in

Artifact 9ae3b9313d97732314e2c38c66d2c1bee7402c10:


0000: 3b 3b 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20  ;;.;; Copyright 
0010: 32 30 31 36 20 41 6c 64 6f 20 4e 69 63 6f 6c 61  2016 Aldo Nicola
0020: 73 20 42 72 75 6e 6f 0a 3b 3b 0a 3b 3b 20 4c 69  s Bruno.;;.;; Li
0030: 63 65 6e 73 65 64 20 75 6e 64 65 72 20 74 68 65  censed under the
0040: 20 41 70 61 63 68 65 20 4c 69 63 65 6e 73 65 2c   Apache License,
0050: 20 56 65 72 73 69 6f 6e 20 32 2e 30 20 28 74 68   Version 2.0 (th
0060: 65 20 22 4c 69 63 65 6e 73 65 22 29 3b 0a 3b 3b  e "License");.;;
0070: 20 79 6f 75 20 6d 61 79 20 6e 6f 74 20 75 73 65   you may not use
0080: 20 74 68 69 73 20 66 69 6c 65 20 65 78 63 65 70   this file excep
0090: 74 20 69 6e 20 63 6f 6d 70 6c 69 61 6e 63 65 20  t in compliance 
00a0: 77 69 74 68 20 74 68 65 20 4c 69 63 65 6e 73 65  with the License
00b0: 2e 0a 3b 3b 20 59 6f 75 20 6d 61 79 20 6f 62 74  ..;; You may obt
00c0: 61 69 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68  ain a copy of th
00d0: 65 20 4c 69 63 65 6e 73 65 20 61 74 0a 3b 3b 0a  e License at.;;.
00e0: 3b 3b 20 20 20 20 20 68 74 74 70 3a 2f 2f 77 77  ;;     http://ww
00f0: 77 2e 61 70 61 63 68 65 2e 6f 72 67 2f 6c 69 63  w.apache.org/lic
0100: 65 6e 73 65 73 2f 4c 49 43 45 4e 53 45 2d 32 2e  enses/LICENSE-2.
0110: 30 0a 3b 3b 0a 3b 3b 20 55 6e 6c 65 73 73 20 72  0.;;.;; Unless r
0120: 65 71 75 69 72 65 64 20 62 79 20 61 70 70 6c 69  equired by appli
0130: 63 61 62 6c 65 20 6c 61 77 20 6f 72 20 61 67 72  cable law or agr
0140: 65 65 64 20 74 6f 20 69 6e 20 77 72 69 74 69 6e  eed to in writin
0150: 67 2c 20 73 6f 66 74 77 61 72 65 0a 3b 3b 20 64  g, software.;; d
0160: 69 73 74 72 69 62 75 74 65 64 20 75 6e 64 65 72  istributed under
0170: 20 74 68 65 20 4c 69 63 65 6e 73 65 20 69 73 20   the License is 
0180: 64 69 73 74 72 69 62 75 74 65 64 20 6f 6e 20 61  distributed on a
0190: 6e 20 22 41 53 20 49 53 22 20 42 41 53 49 53 2c  n "AS IS" BASIS,
01a0: 0a 3b 3b 20 57 49 54 48 4f 55 54 20 57 41 52 52  .;; WITHOUT WARR
01b0: 41 4e 54 49 45 53 20 4f 52 20 43 4f 4e 44 49 54  ANTIES OR CONDIT
01c0: 49 4f 4e 53 20 4f 46 20 41 4e 59 20 4b 49 4e 44  IONS OF ANY KIND
01d0: 2c 20 65 69 74 68 65 72 20 65 78 70 72 65 73 73  , either express
01e0: 20 6f 72 20 69 6d 70 6c 69 65 64 2e 0a 3b 3b 20   or implied..;; 
01f0: 53 65 65 20 74 68 65 20 4c 69 63 65 6e 73 65 20  See the License 
0200: 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
0210: 20 6c 61 6e 67 75 61 67 65 20 67 6f 76 65 72 6e   language govern
0220: 69 6e 67 20 70 65 72 6d 69 73 73 69 6f 6e 73 20  ing permissions 
0230: 61 6e 64 0a 3b 3b 20 6c 69 6d 69 74 61 74 69 6f  and.;; limitatio
0240: 6e 73 20 75 6e 64 65 72 20 74 68 65 20 4c 69 63  ns under the Lic
0250: 65 6e 73 65 2e 0a 0a 23 21 72 36 72 73 0a 28 6c  ense...#!r6rs.(l
0260: 69 62 72 61 72 79 20 0a 20 28 6e 61 6e 6f 6d 73  ibrary . (nanoms
0270: 67 29 20 0a 20 28 65 78 70 6f 72 74 20 0a 20 20  g) . (export .  
0280: 6e 61 6e 6f 6d 73 67 2d 6c 69 62 72 61 72 79 2d  nanomsg-library-
0290: 69 6e 69 74 0a 20 20 6e 6e 2d 65 72 72 6e 6f 20  init.  nn-errno 
02a0: 6e 6e 2d 73 74 72 65 72 72 6f 72 20 20 6e 6e 2d  nn-strerror  nn-
02b0: 62 69 6e 64 20 6e 6e 2d 73 65 6e 64 20 6e 6e 2d  bind nn-send nn-
02c0: 72 65 63 76 20 6e 6e 2d 63 6f 6e 6e 65 63 74 20  recv nn-connect 
02d0: 6e 6e 2d 70 6f 6c 6c 20 6e 6e 2d 63 6c 6f 73 65  nn-poll nn-close
02e0: 0a 20 20 6e 6e 2d 73 6f 63 6b 65 74 20 6e 6e 2d  .  nn-socket nn-
02f0: 61 73 73 65 72 74 20 6e 6e 2d 73 68 75 74 64 6f  assert nn-shutdo
0300: 77 6e 20 6e 6e 2d 66 72 65 65 6d 73 67 20 6e 6e  wn nn-freemsg nn
0310: 2d 72 65 63 76 6d 73 67 20 6e 6e 2d 73 65 6e 64  -recvmsg nn-send
0320: 6d 73 67 0a 20 20 6e 6e 2d 73 74 72 65 72 72 6f  msg.  nn-strerro
0330: 72 20 6e 6e 2d 73 65 74 73 6f 63 6b 6f 70 74 20  r nn-setsockopt 
0340: 6e 6e 2d 73 65 74 73 6f 63 6b 6f 70 74 2f 69 6e  nn-setsockopt/in
0350: 74 0a 20 20 6e 6e 2d 67 65 74 73 6f 63 6b 6f 70  t.  nn-getsockop
0360: 74 20 6e 6e 2d 67 65 74 2d 73 74 61 74 69 73 74  t nn-get-statist
0370: 69 63 20 6e 6e 2d 64 65 76 69 63 65 20 6e 6e 2d  ic nn-device nn-
0380: 73 79 6d 62 6f 6c 0a 0a 20 20 4e 4e 5f 4d 53 47  symbol..  NN_MSG
0390: 0a 0a 20 20 4e 4e 5f 53 4f 43 4b 41 44 44 52 5f  ..  NN_SOCKADDR_
03a0: 4d 41 58 0a 20 20 4e 4e 5f 53 4f 4c 5f 53 4f 43  MAX.  NN_SOL_SOC
03b0: 4b 45 54 0a 20 20 4e 4e 5f 4c 49 4e 47 45 52 0a  KET.  NN_LINGER.
03c0: 20 20 4e 4e 5f 53 4e 44 42 55 46 0a 20 20 4e 4e    NN_SNDBUF.  NN
03d0: 5f 52 43 56 42 55 46 0a 20 20 4e 4e 5f 53 4e 44  _RCVBUF.  NN_SND
03e0: 54 49 4d 45 4f 0a 20 20 4e 4e 5f 52 43 56 54 49  TIMEO.  NN_RCVTI
03f0: 4d 45 4f 0a 20 20 4e 4e 5f 52 45 43 4f 4e 4e 45  MEO.  NN_RECONNE
0400: 43 54 5f 49 56 4c 0a 20 20 4e 4e 5f 52 45 43 4f  CT_IVL.  NN_RECO
0410: 4e 4e 45 43 54 5f 49 56 4c 5f 4d 41 58 0a 20 20  NNECT_IVL_MAX.  
0420: 4e 4e 5f 53 4e 44 50 52 49 4f 0a 20 20 4e 4e 5f  NN_SNDPRIO.  NN_
0430: 52 43 56 50 52 49 4f 0a 20 20 4e 4e 5f 53 4e 44  RCVPRIO.  NN_SND
0440: 46 44 0a 20 20 4e 4e 5f 52 43 56 46 44 0a 20 20  FD.  NN_RCVFD.  
0450: 4e 4e 5f 44 4f 4d 41 49 4e 0a 20 20 4e 4e 5f 50  NN_DOMAIN.  NN_P
0460: 52 4f 54 4f 43 4f 4c 0a 20 20 4e 4e 5f 49 50 56  ROTOCOL.  NN_IPV
0470: 34 4f 4e 4c 59 0a 20 20 4e 4e 5f 53 4f 43 4b 45  4ONLY.  NN_SOCKE
0480: 54 5f 4e 41 4d 45 0a 20 20 4e 4e 5f 52 43 56 4d  T_NAME.  NN_RCVM
0490: 41 58 53 49 5a 45 0a 20 20 4e 4e 5f 4d 41 58 54  AXSIZE.  NN_MAXT
04a0: 54 4c 0a 20 20 4e 4e 5f 44 4f 4e 54 57 41 49 54  TL.  NN_DONTWAIT
04b0: 0a 20 20 4e 4e 5f 50 4f 4c 4c 49 4e 0a 20 20 4e  .  NN_POLLIN.  N
04c0: 4e 5f 50 4f 4c 4c 4f 55 54 0a 20 20 4e 4e 5f 53  N_POLLOUT.  NN_S
04d0: 54 41 54 5f 45 53 54 41 42 4c 49 53 48 45 44 5f  TAT_ESTABLISHED_
04e0: 43 4f 4e 4e 45 43 54 49 4f 4e 53 0a 20 20 4e 4e  CONNECTIONS.  NN
04f0: 5f 53 54 41 54 5f 41 43 43 45 50 54 45 44 5f 43  _STAT_ACCEPTED_C
0500: 4f 4e 4e 45 43 54 49 4f 4e 53 0a 20 20 4e 4e 5f  ONNECTIONS.  NN_
0510: 53 54 41 54 5f 44 52 4f 50 50 45 44 5f 43 4f 4e  STAT_DROPPED_CON
0520: 4e 45 43 54 49 4f 4e 53 0a 20 20 4e 4e 5f 53 54  NECTIONS.  NN_ST
0530: 41 54 5f 42 52 4f 4b 45 4e 5f 43 4f 4e 4e 45 43  AT_BROKEN_CONNEC
0540: 54 49 4f 4e 53 0a 20 20 4e 4e 5f 53 54 41 54 5f  TIONS.  NN_STAT_
0550: 43 4f 4e 4e 45 43 54 5f 45 52 52 4f 52 53 0a 20  CONNECT_ERRORS. 
0560: 20 4e 4e 5f 53 54 41 54 5f 42 49 4e 44 5f 45 52   NN_STAT_BIND_ER
0570: 52 4f 52 53 0a 20 20 4e 4e 5f 53 54 41 54 5f 41  RORS.  NN_STAT_A
0580: 43 43 45 50 54 5f 45 52 52 4f 52 53 0a 20 20 4e  CCEPT_ERRORS.  N
0590: 4e 5f 53 54 41 54 5f 43 55 52 52 45 4e 54 5f 43  N_STAT_CURRENT_C
05a0: 4f 4e 4e 45 43 54 49 4f 4e 53 0a 20 20 4e 4e 5f  ONNECTIONS.  NN_
05b0: 53 54 41 54 5f 49 4e 50 52 4f 47 52 45 53 53 5f  STAT_INPROGRESS_
05c0: 43 4f 4e 4e 45 43 54 49 4f 4e 53 0a 20 20 4e 4e  CONNECTIONS.  NN
05d0: 5f 53 54 41 54 5f 43 55 52 52 45 4e 54 5f 45 50  _STAT_CURRENT_EP
05e0: 5f 45 52 52 4f 52 53 0a 20 20 4e 4e 5f 53 54 41  _ERRORS.  NN_STA
05f0: 54 5f 4d 45 53 53 41 47 45 53 5f 53 45 4e 54 0a  T_MESSAGES_SENT.
0600: 20 20 4e 4e 5f 53 54 41 54 5f 4d 45 53 53 41 47    NN_STAT_MESSAG
0610: 45 53 5f 52 45 43 45 49 56 45 44 0a 20 20 4e 4e  ES_RECEIVED.  NN
0620: 5f 53 54 41 54 5f 42 59 54 45 53 5f 53 45 4e 54  _STAT_BYTES_SENT
0630: 0a 20 20 4e 4e 5f 53 54 41 54 5f 42 59 54 45 53  .  NN_STAT_BYTES
0640: 5f 52 45 43 45 49 56 45 44 0a 20 20 4e 4e 5f 53  _RECEIVED.  NN_S
0650: 54 41 54 5f 43 55 52 52 45 4e 54 5f 53 4e 44 5f  TAT_CURRENT_SND_
0660: 50 52 49 4f 52 49 54 59 0a 09 09 09 09 09 3b 4e  PRIORITY......;N
0670: 4e 5f 50 52 4f 54 4f 5f 50 41 49 52 0a 20 20 4e  N_PROTO_PAIR.  N
0680: 4e 5f 50 41 49 52 0a 09 09 09 09 09 3b 4e 4e 5f  N_PAIR......;NN_
0690: 50 52 4f 54 4f 5f 50 55 42 53 55 42 0a 20 20 4e  PROTO_PUBSUB.  N
06a0: 4e 5f 50 55 42 0a 20 20 4e 4e 5f 53 55 42 0a 20  N_PUB.  NN_SUB. 
06b0: 20 4e 4e 5f 53 55 42 5f 53 55 42 53 43 52 49 42   NN_SUB_SUBSCRIB
06c0: 45 0a 20 20 4e 4e 5f 53 55 42 5f 55 4e 53 55 42  E.  NN_SUB_UNSUB
06d0: 53 43 52 49 42 45 0a 09 09 09 09 09 3b 4e 4e 5f  SCRIBE......;NN_
06e0: 50 52 4f 54 4f 5f 52 45 51 52 45 50 0a 20 20 4e  PROTO_REQREP.  N
06f0: 4e 5f 52 45 51 0a 20 20 4e 4e 5f 52 45 50 0a 20  N_REQ.  NN_REP. 
0700: 20 4e 4e 5f 52 45 51 5f 52 45 53 45 4e 44 5f 49   NN_REQ_RESEND_I
0710: 56 4c 0a 20 20 4e 4e 5f 54 43 50 0a 20 20 4e 4e  VL.  NN_TCP.  NN
0720: 5f 54 43 50 5f 4e 4f 44 45 4c 41 59 0a 09 09 09  _TCP_NODELAY....
0730: 09 09 3b 4e 4e 5f 50 52 4f 54 4f 5f 50 49 50 45  ..;NN_PROTO_PIPE
0740: 4c 49 4e 45 0a 20 20 4e 4e 5f 50 55 53 48 0a 20  LINE.  NN_PUSH. 
0750: 20 4e 4e 5f 50 55 4c 4c 0a 09 09 09 09 09 3b 4e   NN_PULL......;N
0760: 4e 5f 50 52 4f 54 4f 5f 42 55 53 0a 09 09 09 09  N_PROTO_BUS.....
0770: 09 3b 4e 4e 5f 50 52 4f 54 4f 5f 53 55 52 56 45  .;NN_PROTO_SURVE
0780: 59 0a 20 20 4e 4e 5f 53 55 52 56 45 59 4f 52 0a  Y.  NN_SURVEYOR.
0790: 20 20 4e 4e 5f 52 45 53 50 4f 4e 44 45 4e 54 0a    NN_RESPONDENT.
07a0: 20 20 4e 4e 5f 53 55 52 56 45 59 4f 52 5f 44 45    NN_SURVEYOR_DE
07b0: 41 44 4c 49 4e 45 0a 20 20 4e 4e 5f 49 4e 50 52  ADLINE.  NN_INPR
07c0: 4f 43 0a 20 20 4e 4e 5f 49 50 43 0a 09 09 09 09  OC.  NN_IPC.....
07d0: 09 3b 4e 4e 5f 49 50 43 5f 53 45 43 5f 41 54 54  .;NN_IPC_SEC_ATT
07e0: 52 0a 09 09 09 09 09 3b 4e 4e 5f 49 50 43 5f 4f  R......;NN_IPC_O
07f0: 55 54 42 55 46 53 5a 0a 09 09 09 09 09 3b 4e 4e  UTBUFSZ......;NN
0800: 5f 49 50 43 5f 49 4e 42 55 46 53 5a 0a 20 20 4e  _IPC_INBUFSZ.  N
0810: 4e 5f 57 53 0a 20 20 4e 4e 5f 57 53 5f 4d 53 47  N_WS.  NN_WS_MSG
0820: 5f 54 59 50 45 0a 20 20 4e 4e 5f 57 53 5f 4d 53  _TYPE.  NN_WS_MS
0830: 47 5f 54 59 50 45 5f 54 45 58 54 0a 20 20 4e 4e  G_TYPE_TEXT.  NN
0840: 5f 57 53 5f 4d 53 47 5f 54 59 50 45 5f 42 49 4e  _WS_MSG_TYPE_BIN
0850: 41 52 59 0a 20 20 4e 4e 5f 42 55 53 0a 20 20 0a  ARY.  NN_BUS.  .
0860: 20 20 4e 4e 5f 4e 53 5f 4e 41 4d 45 53 50 41 43    NN_NS_NAMESPAC
0870: 45 0a 20 20 4e 4e 5f 4e 53 5f 56 45 52 53 49 4f  E.  NN_NS_VERSIO
0880: 4e 0a 20 20 4e 4e 5f 4e 53 5f 44 4f 4d 41 49 4e  N.  NN_NS_DOMAIN
0890: 0a 20 20 4e 4e 5f 4e 53 5f 54 52 41 4e 53 50 4f  .  NN_NS_TRANSPO
08a0: 52 54 0a 20 20 4e 4e 5f 4e 53 5f 50 52 4f 54 4f  RT.  NN_NS_PROTO
08b0: 43 4f 4c 0a 20 20 4e 4e 5f 4e 53 5f 4f 50 54 49  COL.  NN_NS_OPTI
08c0: 4f 4e 5f 4c 45 56 45 4c 0a 20 20 4e 4e 5f 4e 53  ON_LEVEL.  NN_NS
08d0: 5f 53 4f 43 4b 45 54 5f 4f 50 54 49 4f 4e 0a 20  _SOCKET_OPTION. 
08e0: 20 4e 4e 5f 4e 53 5f 54 52 41 4e 53 50 4f 52 54   NN_NS_TRANSPORT
08f0: 5f 4f 50 54 49 4f 4e 0a 20 20 4e 4e 5f 4e 53 5f  _OPTION.  NN_NS_
0900: 4f 50 54 49 4f 4e 5f 54 59 50 45 0a 20 20 4e 4e  OPTION_TYPE.  NN
0910: 5f 4e 53 5f 4f 50 54 49 4f 4e 5f 55 4e 49 54 0a  _NS_OPTION_UNIT.
0920: 20 20 4e 4e 5f 4e 53 5f 46 4c 41 47 0a 20 20 4e    NN_NS_FLAG.  N
0930: 4e 5f 4e 53 5f 45 52 52 4f 52 0a 20 20 4e 4e 5f  N_NS_ERROR.  NN_
0940: 4e 53 5f 4c 49 4d 49 54 0a 20 20 4e 4e 5f 4e 53  NS_LIMIT.  NN_NS
0950: 5f 45 56 45 4e 54 0a 20 20 4e 4e 5f 4e 53 5f 53  _EVENT.  NN_NS_S
0960: 54 41 54 49 53 54 49 43 0a 20 20 4e 4e 5f 54 59  TATISTIC.  NN_TY
0970: 50 45 5f 4e 4f 4e 45 0a 20 20 4e 4e 5f 54 59 50  PE_NONE.  NN_TYP
0980: 45 5f 49 4e 54 0a 20 20 4e 4e 5f 54 59 50 45 5f  E_INT.  NN_TYPE_
0990: 53 54 52 0a 20 20 4e 4e 5f 55 4e 49 54 5f 4e 4f  STR.  NN_UNIT_NO
09a0: 4e 45 0a 20 20 4e 4e 5f 55 4e 49 54 5f 42 59 54  NE.  NN_UNIT_BYT
09b0: 45 53 0a 20 20 4e 4e 5f 55 4e 49 54 5f 4d 49 4c  ES.  NN_UNIT_MIL
09c0: 4c 49 53 45 43 4f 4e 44 53 0a 20 20 4e 4e 5f 55  LISECONDS.  NN_U
09d0: 4e 49 54 5f 50 52 49 4f 52 49 54 59 0a 20 20 4e  NIT_PRIORITY.  N
09e0: 4e 5f 55 4e 49 54 5f 42 4f 4f 4c 45 41 4e 0a 20  N_UNIT_BOOLEAN. 
09f0: 20 4e 4e 5f 55 4e 49 54 5f 4d 45 53 53 41 47 45   NN_UNIT_MESSAGE
0a00: 53 0a 20 20 4e 4e 5f 55 4e 49 54 5f 43 4f 55 4e  S.  NN_UNIT_COUN
0a10: 54 45 52 0a 0a 20 20 41 46 5f 53 50 20 41 46 5f  TER..  AF_SP AF_
0a20: 53 50 5f 52 41 57 0a 0a 20 20 4e 4e 5f 4e 4f 54  SP_RAW..  NN_NOT
0a30: 53 55 50 0a 20 20 4e 4e 5f 45 50 52 4f 54 4f 4e  SUP.  NN_EPROTON
0a40: 4f 53 55 50 50 4f 52 54 0a 20 20 4e 4e 5f 45 4e  OSUPPORT.  NN_EN
0a50: 4f 42 55 46 53 0a 20 20 4e 4e 5f 45 4e 45 54 44  OBUFS.  NN_ENETD
0a60: 4f 57 4e 0a 20 20 4e 4e 5f 45 41 44 44 52 49 4e  OWN.  NN_EADDRIN
0a70: 55 53 45 0a 20 20 4e 4e 5f 45 41 44 44 52 4e 4f  USE.  NN_EADDRNO
0a80: 54 41 56 41 49 4c 0a 20 20 4e 4e 5f 45 43 4f 4e  TAVAIL.  NN_ECON
0a90: 4e 52 45 46 55 53 45 44 0a 20 20 4e 4e 5f 45 49  NREFUSED.  NN_EI
0aa0: 4e 50 52 4f 47 52 45 53 53 0a 20 20 4e 4e 5f 45  NPROGRESS.  NN_E
0ab0: 4e 4f 54 53 4f 43 4b 0a 20 20 4e 4e 5f 45 41 46  NOTSOCK.  NN_EAF
0ac0: 4e 4f 53 55 50 50 4f 52 54 0a 20 20 4e 4e 5f 45  NOSUPPORT.  NN_E
0ad0: 50 52 4f 54 4f 0a 20 20 4e 4e 5f 45 41 47 41 49  PROTO.  NN_EAGAI
0ae0: 4e 0a 20 20 4e 4e 5f 45 42 41 44 46 0a 20 20 4e  N.  NN_EBADF.  N
0af0: 4e 5f 45 49 4e 56 41 4c 0a 20 20 4e 4e 5f 45 4d  N_EINVAL.  NN_EM
0b00: 46 49 4c 45 0a 20 20 4e 4e 5f 45 46 41 55 4c 54  FILE.  NN_EFAULT
0b10: 0a 20 20 4e 4e 5f 45 41 43 43 45 53 0a 20 20 4e  .  NN_EACCES.  N
0b20: 4e 5f 45 41 43 43 45 53 53 0a 20 20 4e 4e 5f 45  N_EACCESS.  NN_E
0b30: 4e 45 54 52 45 53 45 54 0a 20 20 4e 4e 5f 45 4e  NETRESET.  NN_EN
0b40: 45 54 55 4e 52 45 41 43 48 0a 20 20 4e 4e 5f 45  ETUNREACH.  NN_E
0b50: 48 4f 53 54 55 4e 52 45 41 43 48 0a 20 20 4e 4e  HOSTUNREACH.  NN
0b60: 5f 45 4e 4f 54 43 4f 4e 4e 0a 20 20 4e 4e 5f 45  _ENOTCONN.  NN_E
0b70: 4d 53 47 53 49 5a 45 0a 20 20 4e 4e 5f 45 54 49  MSGSIZE.  NN_ETI
0b80: 4d 45 44 4f 55 54 0a 20 20 4e 4e 5f 45 43 4f 4e  MEDOUT.  NN_ECON
0b90: 4e 41 42 4f 52 54 45 44 0a 20 20 4e 4e 5f 45 43  NABORTED.  NN_EC
0ba0: 4f 4e 4e 52 45 53 45 54 0a 20 20 4e 4e 5f 45 4e  ONNRESET.  NN_EN
0bb0: 4f 50 52 4f 54 4f 4f 50 54 0a 20 20 4e 4e 5f 45  OPROTOOPT.  NN_E
0bc0: 49 53 43 4f 4e 4e 0a 20 20 4e 4e 5f 45 53 4f 43  ISCONN.  NN_ESOC
0bd0: 4b 54 4e 4f 53 55 50 50 4f 52 54 0a 20 20 4e 4e  KTNOSUPPORT.  NN
0be0: 5f 45 54 45 52 4d 0a 20 20 4e 4e 5f 45 46 53 4d  _ETERM.  NN_EFSM
0bf0: 0a 0a 0a 20 20 45 41 44 44 52 49 4e 55 53 45 0a  ...  EADDRINUSE.
0c00: 20 20 45 41 44 44 52 4e 4f 54 41 56 41 49 4c 0a    EADDRNOTAVAIL.
0c10: 20 20 45 41 46 4e 4f 53 55 50 50 4f 52 54 0a 20    EAFNOSUPPORT. 
0c20: 20 45 41 47 41 49 4e 0a 20 20 45 42 41 44 46 0a   EAGAIN.  EBADF.
0c30: 20 20 45 43 4f 4e 4e 52 45 46 55 53 45 44 0a 20    ECONNREFUSED. 
0c40: 20 45 46 41 55 4c 54 0a 20 20 45 46 53 4d 0a 20   EFAULT.  EFSM. 
0c50: 20 45 49 4e 50 52 4f 47 52 45 53 53 0a 20 20 45   EINPROGRESS.  E
0c60: 49 4e 54 52 0a 20 20 45 49 4e 56 41 4c 0a 20 20  INTR.  EINVAL.  
0c70: 45 4d 46 49 4c 45 0a 20 20 45 4e 41 4d 45 54 4f  EMFILE.  ENAMETO
0c80: 4f 4c 4f 4e 47 0a 20 20 45 4e 45 54 44 4f 57 4e  OLONG.  ENETDOWN
0c90: 0a 20 20 45 4e 4f 42 55 46 53 0a 20 20 45 4e 4f  .  ENOBUFS.  ENO
0ca0: 44 45 56 0a 20 20 45 4e 4f 4d 45 4d 0a 20 20 45  DEV.  ENOMEM.  E
0cb0: 4e 4f 50 52 4f 54 4f 4f 50 54 0a 20 20 45 4e 4f  NOPROTOOPT.  ENO
0cc0: 54 53 4f 43 4b 0a 20 20 45 4e 4f 54 53 55 50 0a  TSOCK.  ENOTSUP.
0cd0: 20 20 45 50 52 4f 54 4f 0a 20 20 45 50 52 4f 54    EPROTO.  EPROT
0ce0: 4f 4e 4f 53 55 50 50 4f 52 54 0a 20 20 45 54 45  ONOSUPPORT.  ETE
0cf0: 52 4d 0a 20 20 45 54 49 4d 45 44 4f 55 54 0a 20  RM.  ETIMEDOUT. 
0d00: 20 45 41 43 43 45 53 0a 20 20 45 43 4f 4e 4e 41   EACCES.  ECONNA
0d10: 42 4f 52 54 45 44 0a 20 20 45 43 4f 4e 4e 52 45  BORTED.  ECONNRE
0d20: 53 45 54 0a 20 20 45 48 4f 53 54 55 4e 52 45 41  SET.  EHOSTUNREA
0d30: 43 48 0a 20 20 45 4d 53 47 53 49 5a 45 0a 20 20  CH.  EMSGSIZE.  
0d40: 45 4e 45 54 52 45 53 45 54 0a 20 20 45 4e 45 54  ENETRESET.  ENET
0d50: 55 4e 52 45 41 43 48 0a 20 20 45 4e 4f 54 43 4f  UNREACH.  ENOTCO
0d60: 4e 4e 0a 0a 20 20 4e 4e 5f 56 45 52 53 49 4f 4e  NN..  NN_VERSION
0d70: 5f 43 55 52 52 45 4e 54 0a 20 20 4e 4e 5f 56 45  _CURRENT.  NN_VE
0d80: 52 53 49 4f 4e 5f 52 45 56 49 53 49 4f 4e 0a 20  RSION_REVISION. 
0d90: 20 4e 4e 5f 56 45 52 53 49 4f 4e 5f 41 47 45 0a   NN_VERSION_AGE.
0da0: 20 20 29 20 3b 65 78 70 6f 72 74 0a 20 28 69 6d    ) ;export. (im
0db0: 70 6f 72 74 20 28 66 66 69 2d 75 74 69 6c 73 29  port (ffi-utils)
0dc0: 20 28 63 68 65 7a 73 63 68 65 6d 65 29 29 0a 20   (chezscheme)). 
0dd0: 0a 20 28 64 65 66 69 6e 65 20 28 6e 61 6e 6f 6d  . (define (nanom
0de0: 73 67 2d 6c 69 62 72 61 72 79 2d 69 6e 69 74 20  sg-library-init 
0df0: 2e 20 74 29 0a 20 20 20 28 6c 6f 61 64 2d 73 68  . t).   (load-sh
0e00: 61 72 65 64 2d 6f 62 6a 65 63 74 20 28 69 66 20  ared-object (if 
0e10: 28 6e 75 6c 6c 3f 20 74 29 20 22 6c 69 62 6e 61  (null? t) "libna
0e20: 6e 6f 6d 73 67 2e 73 6f 22 20 28 63 61 72 20 74  nomsg.so" (car t
0e30: 29 29 29 29 0a 0a 20 28 64 65 66 69 6e 65 2d 73  )))).. (define-s
0e40: 79 6e 74 61 78 20 64 65 66 69 6e 65 2d 6e 6e 2d  yntax define-nn-
0e50: 66 75 6e 63 0a 20 20 20 28 6c 61 6d 62 64 61 20  func.   (lambda 
0e60: 28 78 29 0a 20 20 20 20 20 28 73 79 6e 74 61 78  (x).     (syntax
0e70: 2d 63 61 73 65 20 78 20 28 29 0a 20 20 20 20 20  -case x ().     
0e80: 20 20 5b 28 5f 20 72 65 74 2d 74 79 70 65 20 6e    [(_ ret-type n
0e90: 61 6d 65 20 28 28 61 72 67 2d 6e 61 6d 65 20 61  ame ((arg-name a
0ea0: 72 67 2d 74 79 70 65 29 20 2e 2e 2e 29 20 63 2d  rg-type) ...) c-
0eb0: 6e 61 6d 65 29 20 0a 09 28 77 69 74 68 2d 73 79  name) ..(with-sy
0ec0: 6e 74 61 78 20 0a 09 20 28 5b 66 75 6e 63 74 69  ntax .. ([functi
0ed0: 6f 6e 2d 66 74 79 70 65 20 0a 09 20 20 20 28 64  on-ftype ..   (d
0ee0: 61 74 75 6d 2d 3e 73 79 6e 74 61 78 20 23 27 6e  atum->syntax #'n
0ef0: 61 6d 65 20 0a 09 09 09 20 20 28 73 74 72 69 6e  ame ....  (strin
0f00: 67 2d 3e 73 79 6d 62 6f 6c 20 0a 09 09 09 20 20  g->symbol ....  
0f10: 20 28 73 74 72 69 6e 67 2d 61 70 70 65 6e 64 20   (string-append 
0f20: 0a 09 09 09 20 20 20 20 28 73 79 6d 62 6f 6c 2d  ....    (symbol-
0f30: 3e 73 74 72 69 6e 67 20 0a 09 09 09 20 20 20 20  >string ....    
0f40: 20 28 73 79 6e 74 61 78 2d 3e 64 61 74 75 6d 20   (syntax->datum 
0f50: 23 27 6e 61 6d 65 29 29 20 22 2d 66 74 22 29 29  #'name)) "-ft"))
0f60: 29 5d 20 29 0a 09 20 23 60 28 62 65 67 69 6e 0a  )] ).. #`(begin.
0f70: 09 20 20 20 20 20 28 64 65 66 69 6e 65 20 28 6e  .     (define (n
0f80: 61 6d 65 20 61 72 67 2d 6e 61 6d 65 20 2e 2e 2e  ame arg-name ...
0f90: 29 20 0a 09 20 20 20 20 20 20 20 28 64 65 66 69  ) ..       (defi
0fa0: 6e 65 2d 66 74 79 70 65 20 66 75 6e 63 74 69 6f  ne-ftype functio
0fb0: 6e 2d 66 74 79 70 65 20 28 66 75 6e 63 74 69 6f  n-ftype (functio
0fc0: 6e 20 28 61 72 67 2d 74 79 70 65 20 2e 2e 2e 29  n (arg-type ...)
0fd0: 20 72 65 74 2d 74 79 70 65 29 29 0a 09 20 20 20   ret-type))..   
0fe0: 20 20 20 20 28 6c 65 74 2a 20 28 5b 66 75 6e 63      (let* ([func
0ff0: 74 69 6f 6e 2d 66 70 74 72 20 20 28 6d 61 6b 65  tion-fptr  (make
1000: 2d 66 74 79 70 65 2d 70 6f 69 6e 74 65 72 20 66  -ftype-pointer f
1010: 75 6e 63 74 69 6f 6e 2d 66 74 79 70 65 20 63 2d  unction-ftype c-
1020: 6e 61 6d 65 29 5d 0a 09 09 20 20 20 20 20 20 5b  name)]...      [
1030: 66 75 6e 63 74 69 6f 6e 20 20 20 20 20 20 20 28  function       (
1040: 66 74 79 70 65 2d 72 65 66 20 66 75 6e 63 74 69  ftype-ref functi
1050: 6f 6e 2d 66 74 79 70 65 20 28 29 20 66 75 6e 63  on-ftype () func
1060: 74 69 6f 6e 2d 66 70 74 72 29 5d 29 0a 09 09 20  tion-fptr)])... 
1070: 28 6c 65 74 20 28 5b 72 65 73 75 6c 74 20 28 66  (let ([result (f
1080: 75 6e 63 74 69 6f 6e 20 61 72 67 2d 6e 61 6d 65  unction arg-name
1090: 20 2e 2e 2e 29 5d 29 0a 09 09 20 20 20 23 2c 28   ...)])...   #,(
10a0: 69 66 20 28 61 6e 64 20 28 65 71 3f 20 28 64 61  if (and (eq? (da
10b0: 74 75 6d 20 72 65 74 2d 74 79 70 65 29 20 27 69  tum ret-type) 'i
10c0: 6e 74 29 20 0a 09 09 09 20 20 20 20 20 20 28 6e  nt) ....      (n
10d0: 6f 74 20 28 65 71 3f 20 28 64 61 74 75 6d 20 6e  ot (eq? (datum n
10e0: 61 6d 65 29 20 27 6e 6e 2d 65 72 72 6e 6f 29 29  ame) 'nn-errno))
10f0: 29 0a 09 09 09 20 23 27 28 69 66 20 28 3c 20 72  ).... #'(if (< r
1100: 65 73 75 6c 74 20 30 29 0a 09 09 09 20 20 20 20  esult 0)....    
1110: 20 20 20 28 6c 65 74 20 28 5b 65 72 72 6e 6f 20     (let ([errno 
1120: 28 6e 6e 2d 65 72 72 6e 6f 29 5d 29 0a 09 09 09  (nn-errno)])....
1130: 09 20 28 69 66 20 28 3d 20 65 72 72 6e 6f 20 45  . (if (= errno E
1140: 41 47 41 49 4e 29 20 0a 09 09 09 09 20 20 20 20  AGAIN) .....    
1150: 20 23 66 20 0a 09 09 09 09 20 20 20 20 20 28 65   #f .....     (e
1160: 72 72 6f 72 66 20 27 6e 61 6d 65 20 22 72 65 74  rrorf 'name "ret
1170: 75 72 6e 65 64 20 65 72 72 6f 72 20 7e 64 3a 20  urned error ~d: 
1180: 7e 64 22 0a 09 09 09 09 09 20 20 20 20 20 65 72  ~d"......     er
1190: 72 6e 6f 20 28 6e 6e 2d 73 74 72 65 72 72 6f 72  rno (nn-strerror
11a0: 20 65 72 72 6e 6f 29 29 29 29 0a 09 09 09 20 20   errno))))....  
11b0: 20 20 20 20 20 72 65 73 75 6c 74 29 0a 09 09 09       result)....
11c0: 20 23 27 72 65 73 75 6c 74 29 29 29 29 29 29 5d   #'result))))))]
11d0: 29 29 29 0a 20 0a 20 0a 20 28 64 65 66 69 6e 65  ))). . . (define
11e0: 2d 73 79 6e 74 61 78 20 6e 6e 2d 65 72 72 6f 72  -syntax nn-error
11f0: 0a 20 20 20 28 73 79 6e 74 61 78 2d 72 75 6c 65  .   (syntax-rule
1200: 73 20 28 29 0a 20 20 20 20 20 28 28 5f 20 6e 61  s ().     ((_ na
1210: 6d 65 20 6e 20 29 0a 20 20 20 20 20 20 28 64 65  me n ).      (de
1220: 66 69 6e 65 2d 73 79 6e 74 61 78 20 6e 61 6d 65  fine-syntax name
1230: 20 28 69 64 65 6e 74 69 66 69 65 72 2d 73 79 6e   (identifier-syn
1240: 74 61 78 20 28 2b 20 31 35 36 33 38 34 37 31 32  tax (+ 156384712
1250: 20 6e 29 29 29 29 29 29 0a 20 0a 20 28 6e 6e 2d   n)))))). . (nn-
1260: 65 72 72 6f 72 20 20 4e 4e 5f 4e 4f 54 53 55 50  error  NN_NOTSUP
1270: 20 20 20 20 20 20 20 20 20 20 31 29 0a 20 28 6e            1). (n
1280: 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f 45 50 52 4f  n-error  NN_EPRO
1290: 54 4f 4e 4f 53 55 50 50 4f 52 54 20 32 29 0a 20  TONOSUPPORT 2). 
12a0: 28 6e 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f 45 4e  (nn-error  NN_EN
12b0: 4f 42 55 46 53 20 20 20 20 20 20 20 20 20 33 29  OBUFS         3)
12c0: 0a 20 28 6e 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f  . (nn-error  NN_
12d0: 45 4e 45 54 44 4f 57 4e 20 20 20 20 20 20 20 20  ENETDOWN        
12e0: 34 29 0a 20 28 6e 6e 2d 65 72 72 6f 72 20 20 4e  4). (nn-error  N
12f0: 4e 5f 45 41 44 44 52 49 4e 55 53 45 20 20 20 20  N_EADDRINUSE    
1300: 20 20 35 29 0a 20 28 6e 6e 2d 65 72 72 6f 72 20    5). (nn-error 
1310: 20 4e 4e 5f 45 41 44 44 52 4e 4f 54 41 56 41 49   NN_EADDRNOTAVAI
1320: 4c 20 20 20 36 29 0a 20 28 6e 6e 2d 65 72 72 6f  L   6). (nn-erro
1330: 72 20 20 4e 4e 5f 45 43 4f 4e 4e 52 45 46 55 53  r  NN_ECONNREFUS
1340: 45 44 20 20 20 20 37 29 0a 20 28 6e 6e 2d 65 72  ED    7). (nn-er
1350: 72 6f 72 20 20 4e 4e 5f 45 49 4e 50 52 4f 47 52  ror  NN_EINPROGR
1360: 45 53 53 20 20 20 20 20 38 29 0a 20 28 6e 6e 2d  ESS     8). (nn-
1370: 65 72 72 6f 72 20 20 4e 4e 5f 45 4e 4f 54 53 4f  error  NN_ENOTSO
1380: 43 4b 20 20 20 20 20 20 20 20 39 29 0a 20 28 6e  CK        9). (n
1390: 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f 45 41 46 4e  n-error  NN_EAFN
13a0: 4f 53 55 50 50 4f 52 54 20 20 20 31 30 29 0a 20  OSUPPORT   10). 
13b0: 28 6e 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f 45 50  (nn-error  NN_EP
13c0: 52 4f 54 4f 20 20 20 20 20 20 20 20 20 31 31 29  ROTO         11)
13d0: 0a 20 28 6e 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f  . (nn-error  NN_
13e0: 45 41 47 41 49 4e 20 20 20 20 20 20 20 20 20 31  EAGAIN         1
13f0: 32 29 0a 20 28 6e 6e 2d 65 72 72 6f 72 20 20 4e  2). (nn-error  N
1400: 4e 5f 45 42 41 44 46 20 20 20 20 20 20 20 20 20  N_EBADF         
1410: 20 31 33 29 0a 20 28 6e 6e 2d 65 72 72 6f 72 20   13). (nn-error 
1420: 20 4e 4e 5f 45 49 4e 56 41 4c 20 20 20 20 20 20   NN_EINVAL      
1430: 20 20 20 31 34 29 0a 20 28 6e 6e 2d 65 72 72 6f     14). (nn-erro
1440: 72 20 20 4e 4e 5f 45 4d 46 49 4c 45 20 20 20 20  r  NN_EMFILE    
1450: 20 20 20 20 20 31 35 29 0a 20 28 6e 6e 2d 65 72       15). (nn-er
1460: 72 6f 72 20 20 4e 4e 5f 45 46 41 55 4c 54 20 20  ror  NN_EFAULT  
1470: 20 20 20 20 20 20 20 31 36 29 0a 20 28 6e 6e 2d         16). (nn-
1480: 65 72 72 6f 72 20 20 4e 4e 5f 45 41 43 43 45 53  error  NN_EACCES
1490: 20 20 20 20 20 20 20 20 20 31 37 29 0a 20 28 6e           17). (n
14a0: 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f 45 41 43 43  n-error  NN_EACC
14b0: 45 53 53 20 20 20 20 20 20 20 20 31 37 29 0a 20  ESS        17). 
14c0: 28 6e 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f 45 4e  (nn-error  NN_EN
14d0: 45 54 52 45 53 45 54 20 20 20 20 20 20 31 38 29  ETRESET      18)
14e0: 0a 20 28 6e 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f  . (nn-error  NN_
14f0: 45 4e 45 54 55 4e 52 45 41 43 48 20 20 20 20 31  ENETUNREACH    1
1500: 39 29 0a 20 28 6e 6e 2d 65 72 72 6f 72 20 20 4e  9). (nn-error  N
1510: 4e 5f 45 48 4f 53 54 55 4e 52 45 41 43 48 20 20  N_EHOSTUNREACH  
1520: 20 32 30 29 0a 20 28 6e 6e 2d 65 72 72 6f 72 20   20). (nn-error 
1530: 20 4e 4e 5f 45 4e 4f 54 43 4f 4e 4e 20 20 20 20   NN_ENOTCONN    
1540: 20 20 20 32 31 29 0a 20 28 6e 6e 2d 65 72 72 6f     21). (nn-erro
1550: 72 20 20 4e 4e 5f 45 4d 53 47 53 49 5a 45 20 20  r  NN_EMSGSIZE  
1560: 20 20 20 20 20 32 32 29 0a 20 28 6e 6e 2d 65 72       22). (nn-er
1570: 72 6f 72 20 20 4e 4e 5f 45 54 49 4d 45 44 4f 55  ror  NN_ETIMEDOU
1580: 54 20 20 20 20 20 20 32 33 29 0a 20 28 6e 6e 2d  T      23). (nn-
1590: 65 72 72 6f 72 20 20 4e 4e 5f 45 43 4f 4e 4e 41  error  NN_ECONNA
15a0: 42 4f 52 54 45 44 20 20 20 32 34 29 0a 20 28 6e  BORTED   24). (n
15b0: 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f 45 43 4f 4e  n-error  NN_ECON
15c0: 4e 52 45 53 45 54 20 20 20 20 20 32 35 29 0a 20  NRESET     25). 
15d0: 28 6e 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f 45 4e  (nn-error  NN_EN
15e0: 4f 50 52 4f 54 4f 4f 50 54 20 20 20 20 32 36 29  OPROTOOPT    26)
15f0: 0a 20 28 6e 6e 2d 65 72 72 6f 72 20 20 4e 4e 5f  . (nn-error  NN_
1600: 45 49 53 43 4f 4e 4e 20 20 20 20 20 20 20 20 32  EISCONN        2
1610: 37 29 0a 20 28 6e 6e 2d 65 72 72 6f 72 20 20 4e  7). (nn-error  N
1620: 4e 5f 45 53 4f 43 4b 54 4e 4f 53 55 50 50 4f 52  N_ESOCKTNOSUPPOR
1630: 54 20 32 38 29 0a 20 28 6e 6e 2d 65 72 72 6f 72  T 28). (nn-error
1640: 20 20 4e 4e 5f 45 54 45 52 4d 20 20 20 20 20 20    NN_ETERM      
1650: 20 20 20 20 35 33 29 0a 20 28 6e 6e 2d 65 72 72      53). (nn-err
1660: 6f 72 20 20 4e 4e 5f 45 46 53 4d 20 20 20 20 20  or  NN_EFSM     
1670: 20 20 20 20 20 20 35 34 29 0a 0a 20 28 64 65 66        54).. (def
1680: 69 6e 65 20 4e 4e 5f 4d 53 47 20 2d 31 29 0a 20  ine NN_MSG -1). 
1690: 28 64 65 66 69 6e 65 2d 73 79 6e 74 61 78 20 6e  (define-syntax n
16a0: 6e 2d 64 65 66 69 6e 65 0a 20 20 20 28 73 79 6e  n-define.   (syn
16b0: 74 61 78 2d 72 75 6c 65 73 20 28 29 0a 20 20 20  tax-rules ().   
16c0: 20 20 28 28 5f 20 6e 61 6d 65 20 6e 29 20 0a 20    ((_ name n) . 
16d0: 20 20 20 20 20 28 64 65 66 69 6e 65 2d 73 79 6e       (define-syn
16e0: 74 61 78 20 6e 61 6d 65 20 28 69 64 65 6e 74 69  tax name (identi
16f0: 66 69 65 72 2d 73 79 6e 74 61 78 20 6e 29 29 29  fier-syntax n)))
1700: 29 29 0a 0a 20 28 64 65 66 69 6e 65 2d 6e 6e 2d  )).. (define-nn-
1710: 66 75 6e 63 20 69 6e 74 20 6e 6e 2d 65 72 72 6e  func int nn-errn
1720: 6f 20 28 29 20 22 6e 6e 5f 65 72 72 6e 6f 22 29  o () "nn_errno")
1730: 0a 0a 20 28 64 65 66 69 6e 65 2d 6e 6e 2d 66 75  .. (define-nn-fu
1740: 6e 63 20 69 6e 74 20 6e 6e 2d 73 6f 63 6b 65 74  nc int nn-socket
1750: 20 28 28 64 6f 6d 61 69 6e 20 69 6e 74 29 20 28   ((domain int) (
1760: 70 72 6f 74 6f 63 6f 6c 20 69 6e 74 29 29 0a 20  protocol int)). 
1770: 20 20 22 6e 6e 5f 73 6f 63 6b 65 74 22 29 0a 0a    "nn_socket")..
1780: 20 28 64 65 66 69 6e 65 2d 6e 6e 2d 66 75 6e 63   (define-nn-func
1790: 20 73 74 72 69 6e 67 20 6e 6e 2d 73 79 6d 62 6f   string nn-symbo
17a0: 6c 20 28 28 69 6e 64 65 78 20 69 6e 74 29 20 28  l ((index int) (
17b0: 76 61 6c 75 65 20 28 2a 20 69 6e 74 29 29 29 0a  value (* int))).
17c0: 20 20 20 22 6e 6e 5f 73 79 6d 62 6f 6c 22 29 0a     "nn_symbol").
17d0: 0a 20 3b 3b 20 54 48 49 53 20 57 41 53 2f 43 41  . ;; THIS WAS/CA
17e0: 4e 20 42 45 20 55 53 45 44 20 54 4f 20 47 45 4e  N BE USED TO GEN
17f0: 45 52 41 54 45 20 54 48 45 20 6e 6e 2d 64 65 66  ERATE THE nn-def
1800: 69 6e 65 20 73 74 75 66 66 20 69 6e 20 6e 61 6e  ine stuff in nan
1810: 6f 6d 73 67 2f 73 79 6d 62 6f 6c 73 2e 73 73 0a  omsg/symbols.ss.
1820: 20 3b 3b 20 54 4f 44 4f 3a 20 63 61 6e 20 74 68   ;; TODO: can th
1830: 69 73 20 62 65 20 61 20 6d 61 63 72 6f 20 74 68  is be a macro th
1840: 61 74 20 77 65 20 63 61 6c 6c 20 61 66 74 65 72  at we call after
1850: 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 6c 69 62   loading the lib
1860: 72 61 72 79 3f 0a 20 3b 3b 20 62 75 74 20 73 74  rary?. ;; but st
1870: 69 6c 6c 2e 20 69 74 20 77 69 6c 6c 20 6e 6f 74  ill. it will not
1880: 20 62 65 20 70 6f 73 73 69 62 6c 65 20 74 6f 20   be possible to 
1890: 65 78 70 6f 72 74 20 74 68 65 73 65 20 62 65 63  export these bec
18a0: 61 75 73 65 20 77 65 20 63 61 6e 6e 6f 74 0a 20  ause we cannot. 
18b0: 3b 3b 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  ;; dynamically a
18c0: 64 64 20 65 78 70 6f 72 74 20 65 6e 74 72 69 65  dd export entrie
18d0: 73 3f 20 0a 0a 20 28 64 65 66 69 6e 65 20 28 6e  s? .. (define (n
18e0: 6e 2d 67 65 6e 2d 73 79 6d 62 6f 6c 73 29 0a 20  n-gen-symbols). 
18f0: 20 20 28 64 65 66 69 6e 65 20 70 74 72 20 28 6d    (define ptr (m
1900: 61 6b 65 2d 66 74 79 70 65 2d 70 6f 69 6e 74 65  ake-ftype-pointe
1910: 72 20 69 6e 74 20 28 66 6f 72 65 69 67 6e 2d 61  r int (foreign-a
1920: 6c 6c 6f 63 20 28 66 74 79 70 65 2d 73 69 7a 65  lloc (ftype-size
1930: 6f 66 20 69 6e 74 29 29 29 29 0a 20 20 20 28 6c  of int)))).   (l
1940: 65 74 20 6c 6f 6f 70 20 28 5b 69 20 30 5d 29 0a  et loop ([i 0]).
1950: 20 20 20 20 20 28 6c 65 74 20 28 5b 73 79 6d 20       (let ([sym 
1960: 28 6e 6e 2d 73 79 6d 62 6f 6c 20 69 20 70 74 72  (nn-symbol i ptr
1970: 29 5d 29 0a 20 20 20 20 20 20 20 28 69 66 20 73  )]).       (if s
1980: 79 6d 0a 09 20 20 20 28 62 65 67 69 6e 0a 09 20  ym..   (begin.. 
1990: 20 20 20 20 28 70 72 69 6e 74 66 20 22 28 6e 6e      (printf "(nn
19a0: 2d 64 65 66 69 6e 65 20 7e 64 20 7e 64 29 7e 6e  -define ~d ~d)~n
19b0: 22 20 73 79 6d 20 28 66 74 79 70 65 2d 72 65 66  " sym (ftype-ref
19c0: 20 69 6e 74 20 28 29 20 70 74 72 29 29 0a 09 20   int () ptr)).. 
19d0: 20 20 20 20 28 6c 6f 6f 70 20 28 2b 20 31 20 69      (loop (+ 1 i
19e0: 29 29 29 29 29 29 0a 20 20 20 28 66 6f 72 65 69  )))))).   (forei
19f0: 67 6e 2d 66 72 65 65 20 28 66 74 79 70 65 2d 70  gn-free (ftype-p
1a00: 6f 69 6e 74 65 72 2d 61 64 64 72 65 73 73 20 70  ointer-address p
1a10: 74 72 29 29 29 0a 0a 20 28 69 6e 63 6c 75 64 65  tr))).. (include
1a20: 20 22 6e 61 6e 6f 6d 73 67 2f 73 79 6d 62 6f 6c   "nanomsg/symbol
1a30: 73 2e 73 73 22 29 0a 0a 20 28 64 65 66 69 6e 65  s.ss").. (define
1a40: 2d 6e 6e 2d 66 75 6e 63 20 69 6e 74 20 6e 6e 2d  -nn-func int nn-
1a50: 63 6c 6f 73 65 20 28 28 73 20 69 6e 74 29 29 20  close ((s int)) 
1a60: 22 6e 6e 5f 63 6c 6f 73 65 22 29 0a 0a 20 28 64  "nn_close").. (d
1a70: 65 66 69 6e 65 2d 6e 6e 2d 66 75 6e 63 20 69 6e  efine-nn-func in
1a80: 74 20 6e 6e 2d 73 65 74 73 6f 63 6b 6f 70 74 20  t nn-setsockopt 
1a90: 28 28 73 20 69 6e 74 29 20 28 6c 65 76 65 6c 20  ((s int) (level 
1aa0: 69 6e 74 29 20 28 6f 70 74 69 6f 6e 20 69 6e 74  int) (option int
1ab0: 29 0a 09 09 09 09 20 20 20 20 28 6f 70 74 76 61  ).....    (optva
1ac0: 6c 20 76 6f 69 64 2a 29 20 28 6f 70 74 76 61 6c  l void*) (optval
1ad0: 2d 6c 65 6e 20 73 69 7a 65 5f 74 29 29 0a 20 20  -len size_t)).  
1ae0: 20 22 6e 6e 5f 73 65 74 73 6f 63 6b 6f 70 74 22   "nn_setsockopt"
1af0: 29 0a 0a 0a 28 64 65 66 69 6e 65 20 28 6e 6e 2d  )...(define (nn-
1b00: 73 65 74 73 6f 63 6b 6f 70 74 2f 69 6e 74 20 73  setsockopt/int s
1b10: 20 6c 65 76 65 6c 20 6f 70 74 69 6f 6e 20 6f 70   level option op
1b20: 74 76 61 6c 29 0a 20 20 28 64 65 66 69 6e 65 20  tval).  (define 
1b30: 6f 20 23 66 29 0a 20 20 28 64 65 66 69 6e 65 20  o #f).  (define 
1b40: 72 20 23 66 29 0a 20 20 28 64 79 6e 61 6d 69 63  r #f).  (dynamic
1b50: 2d 77 69 6e 64 20 0a 20 20 20 20 20 20 28 6c 61  -wind .      (la
1b60: 6d 62 64 61 20 28 29 0a 09 28 73 65 74 21 20 6f  mbda ()..(set! o
1b70: 20 28 6d 61 6b 65 2d 66 74 79 70 65 2d 70 6f 69   (make-ftype-poi
1b80: 6e 74 65 72 20 69 6e 74 20 28 66 6f 72 65 69 67  nter int (foreig
1b90: 6e 2d 61 6c 6c 6f 63 20 28 66 74 79 70 65 2d 73  n-alloc (ftype-s
1ba0: 69 7a 65 6f 66 20 69 6e 74 29 29 29 29 29 0a 20  izeof int))))). 
1bb0: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 20       (lambda () 
1bc0: 0a 09 28 66 74 79 70 65 2d 73 65 74 21 20 69 6e  ..(ftype-set! in
1bd0: 74 20 28 29 20 6f 20 6f 70 74 76 61 6c 29 0a 09  t () o optval)..
1be0: 28 73 65 74 21 20 72 20 28 6e 6e 2d 73 65 74 73  (set! r (nn-sets
1bf0: 6f 63 6b 6f 70 74 20 73 20 6c 65 76 65 6c 20 6f  ockopt s level o
1c00: 70 74 69 6f 6e 20 28 66 74 79 70 65 2d 70 6f 69  ption (ftype-poi
1c10: 6e 74 65 72 2d 61 64 64 72 65 73 73 20 6f 29 0a  nter-address o).
1c20: 09 09 09 20 20 20 20 20 20 20 28 66 74 79 70 65  ...       (ftype
1c30: 2d 73 69 7a 65 6f 66 20 69 6e 74 29 29 29 29 0a  -sizeof int)))).
1c40: 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29        (lambda ()
1c50: 0a 09 28 69 66 20 6f 20 28 66 6f 72 65 69 67 6e  ..(if o (foreign
1c60: 2d 66 72 65 65 20 28 66 74 79 70 65 2d 70 6f 69  -free (ftype-poi
1c70: 6e 74 65 72 2d 61 64 64 72 65 73 73 20 6f 29 29  nter-address o))
1c80: 29 29 29 0a 20 20 72 29 0a 0a 20 28 64 65 66 69  ))).  r).. (defi
1c90: 6e 65 2d 6e 6e 2d 66 75 6e 63 20 69 6e 74 20 6e  ne-nn-func int n
1ca0: 6e 2d 67 65 74 73 6f 63 6b 6f 70 74 20 28 28 73  n-getsockopt ((s
1cb0: 20 69 6e 74 29 20 28 6c 65 76 65 6c 20 69 6e 74   int) (level int
1cc0: 29 20 28 6f 70 74 69 6f 6e 20 69 6e 74 29 0a 09  ) (option int)..
1cd0: 09 09 09 20 20 20 20 28 6f 70 74 76 61 6c 20 76  ...    (optval v
1ce0: 6f 69 64 2a 29 20 28 6f 70 74 76 61 6c 2d 6c 65  oid*) (optval-le
1cf0: 6e 20 28 2a 20 73 69 7a 65 5f 74 29 29 29 0a 20  n (* size_t))). 
1d00: 20 20 22 6e 6e 5f 67 65 74 73 6f 63 6b 6f 70 74    "nn_getsockopt
1d10: 22 29 0a 0a 20 28 64 65 66 69 6e 65 2d 6e 6e 2d  ").. (define-nn-
1d20: 66 75 6e 63 20 69 6e 74 20 6e 6e 2d 62 69 6e 64  func int nn-bind
1d30: 20 28 28 73 20 69 6e 74 29 20 28 61 64 64 72 20   ((s int) (addr 
1d40: 73 74 72 69 6e 67 29 29 20 22 6e 6e 5f 62 69 6e  string)) "nn_bin
1d50: 64 22 29 0a 0a 20 28 64 65 66 69 6e 65 2d 6e 6e  d").. (define-nn
1d60: 2d 66 75 6e 63 20 69 6e 74 20 6e 6e 2d 63 6f 6e  -func int nn-con
1d70: 6e 65 63 74 20 28 28 73 20 69 6e 74 29 20 28 61  nect ((s int) (a
1d80: 64 64 72 20 73 74 72 69 6e 67 29 29 20 22 6e 6e  ddr string)) "nn
1d90: 5f 63 6f 6e 6e 65 63 74 22 29 0a 0a 20 28 64 65  _connect").. (de
1da0: 66 69 6e 65 2d 6e 6e 2d 66 75 6e 63 20 69 6e 74  fine-nn-func int
1db0: 20 6e 6e 2d 73 68 75 74 64 6f 77 6e 20 28 28 73   nn-shutdown ((s
1dc0: 20 69 6e 74 29 20 28 68 6f 77 20 69 6e 74 29 29   int) (how int))
1dd0: 20 22 6e 6e 5f 73 68 75 74 64 6f 77 6e 22 29 0a   "nn_shutdown").
1de0: 0a 20 28 64 65 66 69 6e 65 2d 6e 6e 2d 66 75 6e  . (define-nn-fun
1df0: 63 20 69 6e 74 20 6e 6e 2d 73 65 6e 64 25 20 28  c int nn-send% (
1e00: 28 73 20 69 6e 74 29 20 28 62 75 66 20 75 38 2a  (s int) (buf u8*
1e10: 29 20 28 6c 65 6e 20 73 69 7a 65 5f 74 29 20 28  ) (len size_t) (
1e20: 66 6c 61 67 73 20 69 6e 74 29 29 0a 20 20 20 22  flags int)).   "
1e30: 6e 6e 5f 73 65 6e 64 22 29 0a 0a 20 28 64 65 66  nn_send").. (def
1e40: 69 6e 65 20 28 6e 6e 2d 73 65 6e 64 20 73 20 62  ine (nn-send s b
1e50: 75 66 20 66 6c 61 67 73 29 0a 20 20 20 28 6c 65  uf flags).   (le
1e60: 74 2a 20 28 5b 6c 65 6e 20 28 62 79 74 65 76 65  t* ([len (byteve
1e70: 63 74 6f 72 2d 6c 65 6e 67 74 68 20 62 75 66 29  ctor-length buf)
1e80: 5d 0a 09 20 20 5b 72 20 28 6e 6e 2d 73 65 6e 64  ]..  [r (nn-send
1e90: 25 20 73 20 62 75 66 20 6c 65 6e 20 66 6c 61 67  % s buf len flag
1ea0: 73 29 5d 29 0a 20 20 20 20 20 28 69 66 20 28 6e  s)]).     (if (n
1eb0: 6f 74 20 28 3d 20 72 20 6c 65 6e 29 29 0a 09 20  ot (= r len)).. 
1ec0: 28 65 72 72 6f 72 66 20 27 6e 6e 2d 73 65 6e 64  (errorf 'nn-send
1ed0: 20 22 62 79 74 65 73 20 73 65 6e 74 20 7e 64 2f   "bytes sent ~d/
1ee0: 7e 64 22 20 72 20 6c 65 6e 29 0a 09 20 72 29 29  ~d" r len).. r))
1ef0: 29 0a 0a 20 28 64 65 66 69 6e 65 2d 6e 6e 2d 66  ).. (define-nn-f
1f00: 75 6e 63 20 69 6e 74 20 6e 6e 2d 72 65 63 76 25  unc int nn-recv%
1f10: 20 28 28 73 20 69 6e 74 29 20 28 62 75 66 20 76   ((s int) (buf v
1f20: 6f 69 64 2a 29 20 28 6c 65 6e 20 73 69 7a 65 5f  oid*) (len size_
1f30: 74 29 20 28 66 6c 61 67 73 20 69 6e 74 29 29 0a  t) (flags int)).
1f40: 20 20 20 22 6e 6e 5f 72 65 63 76 22 29 0a 0a 20     "nn_recv").. 
1f50: 3b 3b 20 28 64 65 66 69 6e 65 20 28 63 68 61 72  ;; (define (char
1f60: 2a 2d 3e 73 74 72 69 6e 67 20 66 70 74 72 20 2e  *->string fptr .
1f70: 20 62 79 74 65 73 29 0a 20 3b 3b 20 20 20 28 6c   bytes). ;;   (l
1f80: 65 74 20 66 20 28 5b 69 20 30 5d 29 0a 20 3b 3b  et f ([i 0]). ;;
1f90: 20 20 20 20 20 28 6c 65 74 20 28 5b 63 20 28 66       (let ([c (f
1fa0: 74 79 70 65 2d 72 65 66 20 63 68 61 72 20 28 29  type-ref char ()
1fb0: 20 66 70 74 72 20 69 29 5d 29 0a 20 3b 3b 20 20   fptr i)]). ;;  
1fc0: 20 20 20 20 20 28 69 66 20 28 6f 72 20 28 63 68       (if (or (ch
1fd0: 61 72 3d 3f 20 63 20 23 5c 6e 75 6c 29 20 28 61  ar=? c #\nul) (a
1fe0: 6e 64 20 62 79 74 65 73 20 28 3e 3d 20 28 2b 20  nd bytes (>= (+ 
1ff0: 31 20 69 29 20 28 63 61 72 20 62 79 74 65 73 29  1 i) (car bytes)
2000: 29 29 29 0a 20 3b 3b 20 09 20 20 20 28 6d 61 6b  ))). ;; .   (mak
2010: 65 2d 73 74 72 69 6e 67 20 69 29 0a 20 3b 3b 20  e-string i). ;; 
2020: 09 20 20 20 28 6c 65 74 20 28 5b 73 74 72 20 28  .   (let ([str (
2030: 66 20 28 66 78 2b 20 69 20 31 29 29 5d 29 0a 20  f (fx+ i 1))]). 
2040: 3b 3b 20 09 20 20 20 20 20 28 73 74 72 69 6e 67  ;; .     (string
2050: 2d 73 65 74 21 20 73 74 72 20 69 20 63 29 0a 20  -set! str i c). 
2060: 3b 3b 20 09 20 20 20 20 20 73 74 72 29 29 29 29  ;; .     str))))
2070: 29 0a 0a 20 28 64 65 66 69 6e 65 20 6e 6e 2d 72  ).. (define nn-r
2080: 65 63 76 0a 20 20 20 28 63 61 73 65 2d 6c 61 6d  ecv.   (case-lam
2090: 62 64 61 0a 20 20 20 20 20 5b 28 73 20 66 6c 61  bda.     [(s fla
20a0: 67 73 29 0a 20 20 20 20 20 20 28 64 65 66 69 6e  gs).      (defin
20b0: 65 20 62 20 23 66 29 0a 20 20 20 20 20 20 28 64  e b #f).      (d
20c0: 65 66 69 6e 65 20 72 20 23 66 29 0a 20 20 20 20  efine r #f).    
20d0: 20 20 28 64 79 6e 61 6d 69 63 2d 77 69 6e 64 20    (dynamic-wind 
20e0: 0a 09 28 6c 61 6d 62 64 61 20 28 29 0a 09 20 20  ..(lambda ()..  
20f0: 28 73 65 74 21 20 62 20 28 6d 61 6b 65 2d 66 74  (set! b (make-ft
2100: 79 70 65 2d 70 6f 69 6e 74 65 72 20 76 6f 69 64  ype-pointer void
2110: 2a 20 28 66 6f 72 65 69 67 6e 2d 61 6c 6c 6f 63  * (foreign-alloc
2120: 20 28 66 74 79 70 65 2d 73 69 7a 65 6f 66 20 76   (ftype-sizeof v
2130: 6f 69 64 2a 29 29 29 29 0a 09 20 20 28 73 65 74  oid*))))..  (set
2140: 21 20 72 20 28 6e 6e 2d 72 65 63 76 25 20 73 20  ! r (nn-recv% s 
2150: 28 66 74 79 70 65 2d 70 6f 69 6e 74 65 72 2d 61  (ftype-pointer-a
2160: 64 64 72 65 73 73 20 62 29 20 4e 4e 5f 4d 53 47  ddress b) NN_MSG
2170: 20 66 6c 61 67 73 29 29 29 0a 09 28 6c 61 6d 62   flags)))..(lamb
2180: 64 61 20 28 29 0a 09 20 20 28 69 66 20 28 61 6e  da ()..  (if (an
2190: 64 20 72 20 28 3e 20 72 20 30 29 29 0a 09 20 20  d r (> r 0))..  
21a0: 20 20 20 20 28 6c 65 74 20 28 5b 63 20 28 6d 61      (let ([c (ma
21b0: 6b 65 2d 66 74 79 70 65 2d 70 6f 69 6e 74 65 72  ke-ftype-pointer
21c0: 20 63 68 61 72 20 28 66 74 79 70 65 2d 72 65 66   char (ftype-ref
21d0: 20 76 6f 69 64 2a 20 28 29 20 62 29 29 5d 29 0a   void* () b))]).
21e0: 09 09 28 63 68 61 72 2a 2d 3e 62 79 74 65 76 65  ..(char*->byteve
21f0: 63 74 6f 72 20 63 20 72 29 29 29 29 0a 09 28 6c  ctor c r))))..(l
2200: 61 6d 62 64 61 20 28 29 0a 09 20 20 28 69 66 20  ambda ()..  (if 
2210: 28 61 6e 64 20 72 20 28 3e 20 72 20 30 29 29 0a  (and r (> r 0)).
2220: 09 20 20 20 20 20 20 28 6e 6e 2d 66 72 65 65 6d  .      (nn-freem
2230: 73 67 20 28 66 74 79 70 65 2d 72 65 66 20 76 6f  sg (ftype-ref vo
2240: 69 64 2a 20 28 29 20 62 29 29 29 0a 09 20 20 28  id* () b)))..  (
2250: 69 66 20 62 20 28 66 6f 72 65 69 67 6e 2d 66 72  if b (foreign-fr
2260: 65 65 20 28 66 74 79 70 65 2d 70 6f 69 6e 74 65  ee (ftype-pointe
2270: 72 2d 61 64 64 72 65 73 73 20 62 29 29 29 29 29  r-address b)))))
2280: 5d 0a 20 20 20 20 20 5b 28 73 20 62 75 66 20 6c  ].     [(s buf l
2290: 65 6e 20 66 6c 61 67 73 29 0a 20 20 20 20 20 20  en flags).      
22a0: 28 64 65 66 69 6e 65 20 62 20 23 66 29 0a 20 20  (define b #f).  
22b0: 20 20 20 20 28 64 65 66 69 6e 65 20 72 20 23 66      (define r #f
22c0: 29 0a 20 20 20 20 20 20 28 64 79 6e 61 6d 69 63  ).      (dynamic
22d0: 2d 77 69 6e 64 20 0a 09 28 6c 61 6d 62 64 61 20  -wind ..(lambda 
22e0: 28 29 0a 09 20 20 28 73 65 74 21 20 62 20 28 6d  ()..  (set! b (m
22f0: 61 6b 65 2d 66 74 79 70 65 2d 70 6f 69 6e 74 65  ake-ftype-pointe
2300: 72 20 76 6f 69 64 2a 20 28 66 6f 72 65 69 67 6e  r void* (foreign
2310: 2d 61 6c 6c 6f 63 20 28 66 74 79 70 65 2d 73 69  -alloc (ftype-si
2320: 7a 65 6f 66 20 76 6f 69 64 2a 29 29 29 29 0a 09  zeof void*))))..
2330: 20 20 28 73 65 74 21 20 72 20 28 6e 6e 2d 72 65    (set! r (nn-re
2340: 63 76 25 20 73 20 28 66 74 79 70 65 2d 70 6f 69  cv% s (ftype-poi
2350: 6e 74 65 72 2d 61 64 64 72 65 73 73 20 62 29 20  nter-address b) 
2360: 6c 65 6e 20 66 6c 61 67 73 29 29 29 0a 09 28 6c  len flags)))..(l
2370: 61 6d 62 64 61 20 28 29 0a 09 20 20 28 69 66 20  ambda ()..  (if 
2380: 28 61 6e 64 20 72 20 28 3e 20 72 20 30 29 29 0a  (and r (> r 0)).
2390: 09 20 20 20 20 20 20 28 6c 65 74 20 28 5b 63 20  .      (let ([c 
23a0: 28 6d 61 6b 65 2d 66 74 79 70 65 2d 70 6f 69 6e  (make-ftype-poin
23b0: 74 65 72 20 63 68 61 72 20 28 66 74 79 70 65 2d  ter char (ftype-
23c0: 72 65 66 20 76 6f 69 64 2a 20 28 29 20 62 29 29  ref void* () b))
23d0: 5d 29 0a 09 09 28 73 65 74 2d 62 6f 78 21 20 62  ])...(set-box! b
23e0: 75 66 20 28 63 68 61 72 2a 2d 3e 62 79 74 65 76  uf (char*->bytev
23f0: 65 63 74 6f 72 20 63 20 72 29 29 29 0a 09 20 20  ector c r)))..  
2400: 20 20 20 20 28 73 65 74 2d 62 6f 78 21 20 62 75      (set-box! bu
2410: 66 20 23 66 29 29 29 0a 09 28 6c 61 6d 62 64 61  f #f)))..(lambda
2420: 20 28 29 0a 09 20 20 28 69 66 20 28 61 6e 64 20   ()..  (if (and 
2430: 72 20 28 3e 20 72 20 30 29 29 0a 09 20 20 20 20  r (> r 0))..    
2440: 20 20 28 6e 6e 2d 66 72 65 65 6d 73 67 20 28 66    (nn-freemsg (f
2450: 74 79 70 65 2d 72 65 66 20 76 6f 69 64 2a 20 28  type-ref void* (
2460: 29 20 62 29 29 29 0a 09 20 20 28 69 66 20 62 20  ) b)))..  (if b 
2470: 28 66 6f 72 65 69 67 6e 2d 66 72 65 65 20 28 66  (foreign-free (f
2480: 74 79 70 65 2d 70 6f 69 6e 74 65 72 2d 61 64 64  type-pointer-add
2490: 72 65 73 73 20 62 29 29 29 29 29 0a 20 20 20 20  ress b))))).    
24a0: 20 20 72 5d 29 29 0a 0a 20 28 64 65 66 69 6e 65    r])).. (define
24b0: 2d 6e 6e 2d 66 75 6e 63 20 69 6e 74 20 6e 6e 2d  -nn-func int nn-
24c0: 73 65 6e 64 6d 73 67 20 28 28 73 20 69 6e 74 29  sendmsg ((s int)
24d0: 20 28 6d 73 67 68 64 72 20 28 2a 20 6e 6e 2d 6d   (msghdr (* nn-m
24e0: 73 67 68 64 72 29 29 20 28 66 6c 61 67 73 20 69  sghdr)) (flags i
24f0: 6e 74 29 29 0a 20 20 20 22 6e 6e 5f 73 65 6e 64  nt)).   "nn_send
2500: 6d 73 67 22 29 0a 0a 20 28 64 65 66 69 6e 65 2d  msg").. (define-
2510: 6e 6e 2d 66 75 6e 63 20 69 6e 74 20 6e 6e 2d 66  nn-func int nn-f
2520: 72 65 65 6d 73 67 20 28 28 6d 73 67 20 76 6f 69  reemsg ((msg voi
2530: 64 2a 29 29 20 22 6e 6e 5f 66 72 65 65 6d 73 67  d*)) "nn_freemsg
2540: 22 29 0a 0a 20 28 64 65 66 69 6e 65 2d 66 74 79  ").. (define-fty
2550: 70 65 20 6e 6e 2d 69 6f 76 65 63 0a 20 20 20 28  pe nn-iovec.   (
2560: 73 74 72 75 63 74 20 0a 20 20 20 20 28 69 6f 76  struct .    (iov
2570: 5f 62 61 73 65 20 76 6f 69 64 2a 29 20 0a 20 20  _base void*) .  
2580: 20 20 28 69 6f 76 5f 6c 65 6e 20 73 69 7a 65 5f    (iov_len size_
2590: 74 29 29 29 0a 0a 20 28 64 65 66 69 6e 65 2d 66  t))).. (define-f
25a0: 74 79 70 65 20 6e 6e 2d 6d 73 67 68 64 72 0a 20  type nn-msghdr. 
25b0: 20 20 28 73 74 72 75 63 74 0a 20 20 20 20 28 6d    (struct.    (m
25c0: 73 67 5f 69 6f 76 20 28 2a 20 6e 6e 2d 69 6f 76  sg_iov (* nn-iov
25d0: 65 63 29 29 0a 20 20 20 20 28 6d 73 67 5f 69 6f  ec)).    (msg_io
25e0: 76 6c 65 6e 20 69 6e 74 29 20 0a 20 20 20 20 28  vlen int) .    (
25f0: 6d 73 67 5f 63 6f 6e 74 72 6f 6c 20 76 6f 69 64  msg_control void
2600: 2a 29 0a 20 20 20 20 28 6d 73 67 5f 63 6f 6e 74  *).    (msg_cont
2610: 72 6f 6c 6c 65 6e 20 73 69 7a 65 5f 74 29 29 29  rollen size_t)))
2620: 0a 0a 20 28 64 65 66 69 6e 65 2d 66 74 79 70 65  .. (define-ftype
2630: 20 6e 6e 2d 63 6d 73 67 68 64 72 0a 20 20 20 28   nn-cmsghdr.   (
2640: 73 74 72 75 63 74 20 0a 20 20 20 20 28 63 6d 73  struct .    (cms
2650: 67 5f 6c 65 6e 20 73 69 7a 65 5f 74 29 20 0a 20  g_len size_t) . 
2660: 20 20 20 28 63 6d 73 67 5f 6c 65 76 65 6c 20 69     (cmsg_level i
2670: 6e 74 29 0a 20 20 20 20 28 63 6d 73 67 5f 74 79  nt).    (cmsg_ty
2680: 70 65 20 69 6e 74 29 29 29 0a 0a 20 28 64 65 66  pe int))).. (def
2690: 69 6e 65 2d 6e 6e 2d 66 75 6e 63 20 69 6e 74 20  ine-nn-func int 
26a0: 6e 6e 2d 72 65 63 76 6d 73 67 20 28 28 73 20 69  nn-recvmsg ((s i
26b0: 6e 74 29 20 28 6d 73 67 68 64 72 20 28 2a 20 6e  nt) (msghdr (* n
26c0: 6e 2d 63 6d 73 67 68 64 72 29 29 20 28 66 6c 61  n-cmsghdr)) (fla
26d0: 67 73 20 69 6e 74 29 29 0a 20 20 20 22 6e 6e 5f  gs int)).   "nn_
26e0: 72 65 63 76 6d 73 67 22 29 0a 0a 20 28 64 65 66  recvmsg").. (def
26f0: 69 6e 65 2d 66 74 79 70 65 20 6e 6e 2d 70 6f 6c  ine-ftype nn-pol
2700: 6c 66 64 20 0a 20 20 20 28 73 74 72 75 63 74 20  lfd .   (struct 
2710: 28 66 64 20 69 6e 74 29 20 28 65 76 65 6e 74 73  (fd int) (events
2720: 20 73 68 6f 72 74 29 20 28 72 65 76 65 6e 74 73   short) (revents
2730: 20 73 68 6f 72 74 29 29 29 0a 0a 20 28 64 65 66   short))).. (def
2740: 69 6e 65 2d 6e 6e 2d 66 75 6e 63 20 69 6e 74 20  ine-nn-func int 
2750: 6e 6e 2d 70 6f 6c 6c 20 28 28 66 64 73 20 28 2a  nn-poll ((fds (*
2760: 20 6e 6e 2d 70 6f 6c 6c 66 64 29 29 20 28 6e 66   nn-pollfd)) (nf
2770: 64 73 20 69 6e 74 29 20 28 74 69 6d 65 6f 75 74  ds int) (timeout
2780: 20 69 6e 74 29 29 0a 20 20 20 22 6e 6e 5f 70 6f   int)).   "nn_po
2790: 6c 6c 22 29 0a 0a 0a 20 28 64 65 66 69 6e 65 2d  ll")... (define-
27a0: 6e 6e 2d 66 75 6e 63 20 69 6e 74 20 6e 6e 2d 64  nn-func int nn-d
27b0: 65 76 69 63 65 20 28 28 73 31 20 69 6e 74 29 20  evice ((s1 int) 
27c0: 28 73 32 20 69 6e 74 29 29 20 22 6e 6e 5f 64 65  (s2 int)) "nn_de
27d0: 76 69 63 65 22 29 0a 0a 20 28 64 65 66 69 6e 65  vice").. (define
27e0: 2d 6e 6e 2d 66 75 6e 63 20 69 6e 74 20 6e 6e 2d  -nn-func int nn-
27f0: 67 65 74 2d 73 74 61 74 69 73 74 69 63 20 28 28  get-statistic ((
2800: 73 20 69 6e 74 29 20 28 73 74 61 74 20 69 6e 74  s int) (stat int
2810: 29 29 20 0a 20 20 20 22 6e 6e 5f 67 65 74 5f 73  )) .   "nn_get_s
2820: 74 61 74 69 73 74 69 63 22 29 0a 0a 20 28 64 65  tatistic").. (de
2830: 66 69 6e 65 2d 66 74 79 70 65 20 6e 6e 5f 72 65  fine-ftype nn_re
2840: 71 5f 68 61 6e 64 6c 65 20 0a 20 20 20 28 75 6e  q_handle .   (un
2850: 69 6f 6e 0a 20 20 20 20 28 69 20 69 6e 74 29 0a  ion.    (i int).
2860: 20 20 20 20 28 70 74 72 20 76 6f 69 64 2a 29 29      (ptr void*))
2870: 29 0a 0a 20 28 64 65 66 69 6e 65 2d 66 6c 61 67  ).. (define-flag
2880: 73 20 6e 6e 5f 70 72 6f 74 6f 63 6f 6c 0a 20 20  s nn_protocol.  
2890: 20 28 70 61 69 72 20 4e 4e 5f 50 41 49 52 29 0a   (pair NN_PAIR).
28a0: 20 20 20 28 70 75 62 20 20 4e 4e 5f 50 55 42 29     (pub  NN_PUB)
28b0: 20 20 28 73 75 62 20 20 4e 4e 5f 53 55 42 29 0a    (sub  NN_SUB).
28c0: 20 20 20 28 70 75 6c 6c 20 4e 4e 5f 50 55 4c 4c     (pull NN_PULL
28d0: 29 20 28 70 75 73 68 20 4e 4e 5f 50 55 53 48 29  ) (push NN_PUSH)
28e0: 0a 20 20 20 28 72 65 71 20 20 4e 4e 5f 52 45 51  .   (req  NN_REQ
28f0: 29 20 20 28 72 65 70 20 20 4e 4e 5f 52 45 50 29  )  (rep  NN_REP)
2900: 0a 20 20 20 28 73 75 72 76 65 79 6f 72 20 4e 4e  .   (surveyor NN
2910: 5f 53 55 52 56 45 59 4f 52 29 20 20 28 72 65 73  _SURVEYOR)  (res
2920: 70 6f 6e 64 65 6e 74 20 4e 4e 5f 52 45 53 50 4f  pondent NN_RESPO
2930: 4e 44 45 4e 54 29 0a 20 20 20 28 62 75 73 20 4e  NDENT).   (bus N
2940: 4e 5f 42 55 53 29 29 0a 0a 20 3b 3b 20 6e 61 6e  N_BUS)).. ;; nan
2950: 6f 6d 73 67 20 64 6f 6d 61 69 6e 20 28 41 46 5f  omsg domain (AF_
2960: 53 50 29 0a 20 28 64 65 66 69 6e 65 2d 66 6c 61  SP). (define-fla
2970: 67 73 20 6e 6e 5f 64 6f 6d 61 69 6e 0a 20 20 20  gs nn_domain.   
2980: 28 73 70 20 41 46 5f 53 50 29 0a 20 20 20 28 72  (sp AF_SP).   (r
2990: 61 77 20 41 46 5f 53 50 5f 52 41 57 29 29 0a 0a  aw AF_SP_RAW))..
29a0: 20 3b 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d   ;; ============
29b0: 3d 3d 3d 3d 3d 3d 3d 3d 20 73 6f 63 6b 65 74 20  ======== socket 
29c0: 66 6c 61 67 73 0a 0a 20 28 64 65 66 69 6e 65 2d  flags.. (define-
29d0: 6e 6e 2d 66 75 6e 63 20 73 74 72 69 6e 67 20 6e  nn-func string n
29e0: 6e 2d 73 74 72 65 72 72 6f 72 20 28 28 65 72 72  n-strerror ((err
29f0: 6e 6f 20 69 6e 74 29 29 20 22 6e 6e 5f 73 74 72  no int)) "nn_str
2a00: 65 72 72 6f 72 22 29 0a 0a 20 3b 3b 20 6c 65 74  error").. ;; let
2a10: 20 76 61 6c 20 70 61 73 73 20 75 6e 6c 65 73 73   val pass unless
2a20: 20 69 74 20 69 73 20 6e 65 67 61 74 69 76 65 2c   it is negative,
2a30: 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 67   in which case g
2a40: 75 6c 70 20 77 69 74 68 20 74 68 65 20 6e 6e 0a  ulp with the nn.
2a50: 20 3b 3b 20 65 72 72 6f 72 2d 73 74 72 69 6e 67   ;; error-string
2a60: 2e 20 6f 6e 20 45 41 47 41 49 4e 2c 20 72 65 74  . on EAGAIN, ret
2a70: 75 72 6e 20 23 66 2e 0a 20 28 64 65 66 69 6e 65  urn #f.. (define
2a80: 20 28 6e 6e 2d 61 73 73 65 72 74 20 76 61 6c 29   (nn-assert val)
2a90: 0a 20 20 20 28 69 66 20 28 3c 20 76 61 6c 20 30  .   (if (< val 0
2aa0: 29 0a 20 20 20 20 20 20 20 28 69 66 20 28 3d 20  ).       (if (= 
2ab0: 28 6e 6e 2d 65 72 72 6e 6f 29 0a 09 20 20 20 20  (nn-errno)..    
2ac0: 20 20 4e 4e 5f 45 41 47 41 49 4e 0a 09 20 20 20    NN_EAGAIN..   
2ad0: 20 20 20 23 66 20 3b 3b 20 73 69 67 6e 61 6c 20     #f ;; signal 
2ae0: 45 47 41 49 4e 20 77 69 74 68 20 23 66 2c 20 6f  EGAIN with #f, o
2af0: 74 68 65 72 20 65 72 72 6f 72 73 20 77 69 6c 6c  ther errors will
2b00: 20 74 68 72 6f 77 0a 09 20 20 20 20 20 20 28 65   throw..      (e
2b10: 72 72 6f 72 20 28 6e 6e 2d 73 74 72 65 72 72 6f  rror (nn-strerro
2b20: 72 20 28 6e 6e 2d 65 72 72 6e 6f 29 29 20 76 61  r (nn-errno)) va
2b30: 6c 29 29 0a 09 20 20 20 76 61 6c 29 29 29 0a 20  l))..   val))). 
2b40: 29 3b 3b 6c 69 62 72 61 72 79 0a                 );;library.