diff options
| -rw-r--r-- | bindings/cl/zeromq-api.lisp | 12 | ||||
| -rw-r--r-- | bindings/cl/zeromq.lisp | 3 | 
2 files changed, 9 insertions, 6 deletions
diff --git a/bindings/cl/zeromq-api.lisp b/bindings/cl/zeromq-api.lisp index 188bdd4..44d725b 100644 --- a/bindings/cl/zeromq-api.lisp +++ b/bindings/cl/zeromq-api.lisp @@ -146,7 +146,7 @@ The string must be freed with FOREIGN-STRING-FREE."  	       (setf (mem-aref int :long 0) value)  	       (%setsockopt socket option int (foreign-type-size :long)))))) -(defun poll (items) +(defun poll (items &optional (timeout -1))    (let ((len (length items)))      (with-foreign-object (%items 'pollitem len)        (dotimes (i len) @@ -156,14 +156,16 @@ The string must be freed with FOREIGN-STRING-FREE."  	    (setf socket (pollitem-socket item)  		  fd (pollitem-fd item)  		  events (pollitem-events item))))) -      (let ((ret (%poll %items len))) -	(if (> ret 0) +      (let ((ret (%poll %items len timeout))) +	(cond +	  ((zerop ret) nil) +	  ((> ret 0)  	    (loop for i below len  	       for revent = (foreign-slot-value (mem-aref %items 'pollitem i)  						'pollitem  						'revents) -	       collect (setf (pollitem-revents (nth i items)) revent)) -	    (error (convert-from-foreign (%strerror *errno*) :string))))))) +	       collect (setf (pollitem-revents (nth i items)) revent))) +	  (t (error (convert-from-foreign (%strerror *errno*) :string))))))))  (defmacro with-polls (list &body body)    `(let ,(loop for (name . polls) in list diff --git a/bindings/cl/zeromq.lisp b/bindings/cl/zeromq.lisp index 90b42da..217b97c 100644 --- a/bindings/cl/zeromq.lisp +++ b/bindings/cl/zeromq.lisp @@ -231,7 +231,8 @@  (defcfun ("zmq_poll" %poll) :int    (items	:pointer) -  (nitems	:int)) +  (nitems	:int) +  (timeout	:long))  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ;;  Helper functions.  | 
