Hi Dmitry,
> Is this newsletter alive?:)
Yes, just not so noisy :)
> I'm playing around with `native` and ZeroMQ and found a curious behaviour.
>
> (unless (fork)
> (wait 2000)
> (bye))
>
> (setq Context (native "libzmq.so" "zmq_ctx_new" 'P))
> (setq ZMQ_REP 4)
> (setq Socket (native "libzmq.so" "zmq_socket" 'P Context ZMQ_REP))
> (native "libzmq.so" "zmq_bind" 'I Socket "tcp://*:5555")
>
> (buf
> Buffer 10
> (prinl "Waiting for messages")
> (when (= -1 (native "libzmq.so" "zmq_recv" 'I Socket Buffer 10 0))
> (prinl (pack "Error: " (errno)))))
This looks good.
> The `errno` is 4 (which is signal interrupt as i understand).
Yes. EINTR is 4 on most systems. You can see it with
: (sysdefs "errno")
-> EACCES
: EINTR
-> 4
or (vi "@lib/sysdefs").
> My assumption here is that `bye` throws some signal? Why else would it affect
> zeromq in the parent process?
> Actually, while writing this I found out about SIGCHLD which is apparently
> sent to parent on child's exit so I guess zmq_recv gets interrupted by that
> for some reason?
Absolutely correct. The child sends a SIGCHLD signal, which must be handled or
ignored.
I don't have libzmq at the moment and cannot test it, but I think it should be
something like
(while (lt0 (native "libzmq.so" "zmq_recv" 'I Socket Buffer 10 0))
(unless (== EINTR (errno))
(quit (errno) "Signal") ) )
> P.S. completely offtopic but since I'm here. I just noticed that semicolons
> aren't treated as comments. Why?
Comments in PicoLisp are # or #{...}#.
> Can it be enabled? Otherwise my Emacs' lisp-mode comment/uncomment function is
> useless and no comment highlight either.
There is no built-in way to change it. There are some Emacs libs for PicoLisp,
but I don't use Emacs and cannot be helpful here.
☺/ A!ex
--
UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe