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.