I have a zmq pub/req client server and everything is working great, nice
and fast etc.
However I need to ping servers to see if they are alive so I wrote a little
code to try and connect to the server and return yay/nay. The problem I
have is that if I don't close the socket (I'm pinging a number of servers)
I get crashes. If I do close the socket I get this:
INFO: (0) connected as client
Warning: in finalizer: (close-socket) Socket operation on non-socket: 88
Call history:
configf.scm:42: filter
configf.scm:43: append
====for what its worth here is the server ping code======
;; ping a server and return number of clients or #f (if no response)
(define (server:ping host port #!key (secs 10))
(cdb:use-non-blocking-mode
(lambda ()
(let* ((res #f)
(th1 (make-thread
(lambda ()
(let ((zmq-socket (server:client-connect host port)))
(if zmq-socket
(if (server:client-login zmq-socket)
(let ((numclients (cdb:num-clients zmq-socket)))
(server:client-logout zmq-socket)
(close-socket zmq-socket)
(set! res (list #t numclients)))
(begin
;; (close-socket zmq-socket)
(set! res (list #f "CAN'T LOGIN"))))
(set! res (list #f "CAN'T CONNECT")))))))
(th2 (make-thread
(lambda ()
(let loop ((count 1))
(debug:print-info 1 "Ping " count " server on " host " at
port " port)
(thread-sleep! 2)
(if (< count (/ secs 2))
(loop (+ count 1))))
;; (thread-terminate! th1)
(set! res (list #f "TIMED OUT"))))))
(thread-start! th2)
(thread-start! th1)
(handle-exceptions
exn
(set! res (list #f "TIMED OUT"))
(thread-join! th1 secs))
res))))
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users