Artifact
9ae3b9313d97732314e2c38c66d2c1bee7402c10:
- File
nanomsg.sls
— part of check-in
[791b935228]
at
2018-12-09 15:18:34
on branch trunk
— improved nn-recv
(user:
aldo
size: 11083)
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.