Artifact
c7bfab5957144a27020b66b1acf5da2a7c8ddea5:
- Executable file
nanomsg/pair
— part of check-in
[590cb5e905]
at
2016-08-17 07:41:06
on branch trunk
— nanomsg error handling and other fixes
(user:
ovenpasta@pizzahack.eu
size: 1628)
0000: 23 21 20 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 #! /usr/bin/env
0010: 73 63 68 65 6d 65 2d 73 63 72 69 70 74 0a 3b 20 scheme-script.;
0020: 2d 2a 2d 20 6d 6f 64 65 3a 20 73 63 68 65 6d 65 -*- mode: scheme
0030: 20 2d 2a 2d 0a 0a 3b 20 47 65 74 74 69 6e 67 20 -*-..; Getting
0040: 53 74 61 72 74 65 64 20 77 69 74 68 20 27 6e 61 Started with 'na
0050: 6e 6f 6d 73 67 27 0a 3b 20 50 61 69 72 0a 3b 20 nomsg'.; Pair.;
0060: 66 72 6f 6d 20 68 74 74 70 73 3a 2f 2f 67 69 74 from https://git
0070: 68 75 62 2e 63 6f 6d 2f 64 79 73 69 6e 67 65 72 hub.com/dysinger
0080: 2f 6e 61 6e 6f 6d 73 67 2d 65 78 61 6d 70 6c 65 /nanomsg-example
0090: 73 23 70 61 69 72 0a 0a 23 21 63 68 65 7a 73 63 s#pair..#!chezsc
00a0: 68 65 6d 65 0a 0a 28 69 6d 70 6f 72 74 20 28 6e heme..(import (n
00b0: 61 6e 6f 6d 73 67 29 20 28 63 68 65 7a 73 63 68 anomsg) (chezsch
00c0: 65 6d 65 29 29 0a 0a 28 6e 61 6e 6f 6d 73 67 2d eme))..(nanomsg-
00d0: 6c 69 62 72 61 72 79 2d 69 6e 69 74 29 0a 0a 28 library-init)..(
00e0: 64 65 66 69 6e 65 20 6e 6f 64 65 30 2d 6e 61 6d define node0-nam
00f0: 65 20 22 6e 6f 64 65 30 22 29 0a 28 64 65 66 69 e "node0").(defi
0100: 6e 65 20 6e 6f 64 65 31 2d 6e 61 6d 65 20 22 6e ne node1-name "n
0110: 6f 64 65 31 22 29 0a 0a 28 64 65 66 69 6e 65 20 ode1")..(define
0120: 28 73 65 6e 64 2d 6e 61 6d 65 20 73 6f 63 6b 20 (send-name sock
0130: 6e 61 6d 65 29 0a 20 28 70 72 69 6e 74 66 20 22 name). (printf "
0140: 7e 73 3a 20 53 45 4e 44 49 4e 47 20 27 7e 73 27 ~s: SENDING '~s'
0150: 7e 6e 22 20 6e 61 6d 65 20 6e 61 6d 65 29 0a 20 ~n" name name).
0160: 28 6e 6e 2d 73 65 6e 64 20 73 6f 63 6b 20 28 73 (nn-send sock (s
0170: 74 72 69 6e 67 2d 3e 75 74 66 38 20 6e 61 6d 65 tring->utf8 name
0180: 29 20 30 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 ) 0))..(define (
0190: 72 65 63 76 2d 6e 61 6d 65 20 73 6f 63 6b 20 6e recv-name sock n
01a0: 61 6d 65 29 0a 20 20 28 6c 65 74 2a 20 20 28 5b ame). (let* ([
01b0: 62 75 66 20 28 62 6f 78 20 23 74 29 5d 0a 09 20 buf (box #t)]..
01c0: 20 5b 72 65 73 75 6c 74 20 28 67 75 61 72 64 20 [result (guard
01d0: 28 78 20 5b 28 3d 20 28 6e 6e 2d 65 72 72 6e 6f (x [(= (nn-errno
01e0: 29 20 45 54 49 4d 45 44 4f 55 54 29 20 2d 31 5d ) ETIMEDOUT) -1]
01f0: 29 0a 09 09 09 20 28 6e 6e 2d 72 65 63 76 20 73 ).... (nn-recv s
0200: 6f 63 6b 20 62 75 66 20 4e 4e 5f 4d 53 47 20 30 ock buf NN_MSG 0
0210: 29 29 5d 29 0a 20 20 20 20 28 77 68 65 6e 20 28 ))]). (when (
0220: 3e 20 72 65 73 75 6c 74 20 30 29 0a 09 20 20 28 > result 0).. (
0230: 70 72 69 6e 74 66 20 22 7e 64 3a 20 52 45 43 45 printf "~d: RECE
0240: 49 56 45 44 20 27 7e 64 27 7e 6e 22 20 6e 61 6d IVED '~d'~n" nam
0250: 65 20 28 75 74 66 38 2d 3e 73 74 72 69 6e 67 20 e (utf8->string
0260: 28 75 6e 62 6f 78 20 62 75 66 29 29 29 29 0a 20 (unbox buf)))).
0270: 20 20 20 72 65 73 75 6c 74 29 29 0a 0a 28 64 65 result))..(de
0280: 66 69 6e 65 20 28 73 6c 65 65 70 2d 73 20 73 65 fine (sleep-s se
0290: 63 29 0a 20 20 28 73 6c 65 65 70 20 28 6d 61 6b c). (sleep (mak
02a0: 65 2d 74 69 6d 65 20 27 74 69 6d 65 2d 64 75 72 e-time 'time-dur
02b0: 61 74 69 6f 6e 20 30 20 73 65 63 29 29 29 0a 09 ation 0 sec)))..
02c0: 0a 28 64 65 66 69 6e 65 20 28 73 65 6e 64 2d 72 .(define (send-r
02d0: 65 63 76 20 73 6f 63 6b 20 6e 61 6d 65 29 0a 20 ecv sock name).
02e0: 20 28 6e 6e 2d 73 65 74 73 6f 63 6b 6f 70 74 2f (nn-setsockopt/
02f0: 69 6e 74 20 73 6f 63 6b 20 4e 4e 5f 53 4f 4c 5f int sock NN_SOL_
0300: 53 4f 43 4b 45 54 20 4e 4e 5f 52 43 56 54 49 4d SOCKET NN_RCVTIM
0310: 45 4f 20 31 30 30 29 0a 20 20 28 6c 65 74 20 6c EO 100). (let l
0320: 6f 6f 70 20 28 29 0a 20 20 20 20 28 72 65 63 76 oop (). (recv
0330: 2d 6e 61 6d 65 20 73 6f 63 6b 20 6e 61 6d 65 29 -name sock name)
0340: 0a 20 20 20 20 28 73 6c 65 65 70 2d 73 20 31 29 . (sleep-s 1)
0350: 0a 20 20 20 20 28 73 65 6e 64 2d 6e 61 6d 65 20 . (send-name
0360: 73 6f 63 6b 20 6e 61 6d 65 29 0a 20 20 20 20 28 sock name). (
0370: 6c 6f 6f 70 29 29 29 0a 09 0a 28 64 65 66 69 6e loop)))...(defin
0380: 65 20 28 6e 6f 64 65 30 20 75 72 6c 29 0a 20 20 e (node0 url).
0390: 28 64 65 66 69 6e 65 20 73 6f 63 6b 20 28 6e 6e (define sock (nn
03a0: 2d 73 6f 63 6b 65 74 20 41 46 5f 53 50 20 4e 4e -socket AF_SP NN
03b0: 5f 50 41 49 52 29 29 0a 20 20 28 64 65 66 69 6e _PAIR)). (defin
03c0: 65 20 65 69 64 20 28 6e 6e 2d 62 69 6e 64 20 73 e eid (nn-bind s
03d0: 6f 63 6b 20 75 72 6c 29 29 0a 20 20 28 73 65 6e ock url)). (sen
03e0: 64 2d 72 65 63 76 20 73 6f 63 6b 20 6e 6f 64 65 d-recv sock node
03f0: 30 2d 6e 61 6d 65 29 0a 20 20 28 6e 6e 2d 73 68 0-name). (nn-sh
0400: 75 74 64 6f 77 6e 20 73 6f 63 6b 20 65 69 64 29 utdown sock eid)
0410: 29 0a 0a 28 64 65 66 69 6e 65 20 28 6e 6f 64 65 )..(define (node
0420: 31 20 75 72 6c 29 0a 20 20 28 64 65 66 69 6e 65 1 url). (define
0430: 20 73 6f 63 6b 20 28 6e 6e 2d 73 6f 63 6b 65 74 sock (nn-socket
0440: 20 41 46 5f 53 50 20 4e 4e 5f 50 41 49 52 29 29 AF_SP NN_PAIR))
0450: 0a 20 20 28 64 65 66 69 6e 65 20 65 69 64 20 28 . (define eid (
0460: 6e 6e 2d 63 6f 6e 6e 65 63 74 20 73 6f 63 6b 20 nn-connect sock
0470: 75 72 6c 29 29 0a 20 20 28 73 65 6e 64 2d 72 65 url)). (send-re
0480: 63 76 20 73 6f 63 6b 20 6e 6f 64 65 31 2d 6e 61 cv sock node1-na
0490: 6d 65 29 0a 20 20 28 6e 6e 2d 73 68 75 74 64 6f me). (nn-shutdo
04a0: 77 6e 20 73 6f 63 6b 20 65 69 64 29 29 0a 0a 28 wn sock eid))..(
04b0: 64 65 66 69 6e 65 20 61 72 67 76 20 28 63 6f 6d define argv (com
04c0: 6d 61 6e 64 2d 6c 69 6e 65 2d 61 72 67 75 6d 65 mand-line-argume
04d0: 6e 74 73 29 29 0a 28 64 65 66 69 6e 65 20 61 72 nts)).(define ar
04e0: 67 63 20 28 6c 65 6e 67 74 68 20 61 72 67 76 29 gc (length argv)
04f0: 29 0a 0a 28 63 6f 6e 64 0a 20 5b 28 61 6e 64 20 )..(cond. [(and
0500: 28 3e 20 61 72 67 63 20 31 29 20 28 73 74 72 69 (> argc 1) (stri
0510: 6e 67 3d 3f 20 6e 6f 64 65 30 2d 6e 61 6d 65 20 ng=? node0-name
0520: 28 63 61 72 20 61 72 67 76 29 29 29 0a 20 20 28 (car argv))). (
0530: 6e 6f 64 65 30 20 28 63 61 64 72 20 61 72 67 76 node0 (cadr argv
0540: 29 29 5d 0a 20 5b 28 61 6e 64 20 28 3e 20 61 72 ))]. [(and (> ar
0550: 67 63 20 31 29 20 28 73 74 72 69 6e 67 3d 3f 20 gc 1) (string=?
0560: 6e 6f 64 65 31 2d 6e 61 6d 65 20 28 63 61 72 20 node1-name (car
0570: 61 72 67 76 29 29 29 0a 20 20 28 6e 6f 64 65 31 argv))). (node1
0580: 20 28 63 61 64 72 20 61 72 67 76 29 29 5d 0a 20 (cadr argv))].
0590: 5b 65 6c 73 65 0a 20 20 28 70 72 69 6e 74 66 20 [else. (printf
05a0: 22 55 73 61 67 65 3a 20 70 61 69 72 20 7e 64 7c "Usage: pair ~d|
05b0: 7e 64 20 3c 55 52 4c 3e 20 3c 41 52 47 3e 20 2e ~d <URL> <ARG> .
05c0: 2e 2e 27 7e 6e 22 20 6e 6f 64 65 30 2d 6e 61 6d ..'~n" node0-nam
05d0: 65 20 6e 6f 64 65 31 2d 6e 61 6d 65 29 5d 29 0a e node1-name)]).
05e0: 0a 0a 23 21 65 6f 66 0a 0a 2e 2f 70 61 69 72 20 ..#!eof.../pair
05f0: 6e 6f 64 65 30 20 69 70 63 3a 2f 2f 2f 74 6d 70 node0 ipc:///tmp
0600: 2f 70 61 69 72 2e 69 70 63 20 26 20 6e 6f 64 65 /pair.ipc & node
0610: 30 3d 24 21 0a 2e 2f 70 61 69 72 20 6e 6f 64 65 0=$!../pair node
0620: 31 20 69 70 63 3a 2f 2f 2f 74 6d 70 2f 70 61 69 1 ipc:///tmp/pai
0630: 72 2e 69 70 63 20 26 20 6e 6f 64 65 31 3d 24 21 r.ipc & node1=$!
0640: 0a 73 6c 65 65 70 20 33 0a 6b 69 6c 6c 20 24 6e .sleep 3.kill $n
0650: 6f 64 65 30 20 24 6e 6f 64 65 31 0a ode0 $node1.