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:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to