anchor.diff:  
   Returns the number of octets actually sent, which can be less than the number requested."
     (declare (type (or (vector (unsigned-byte 8)) foreign-pointer can-packet) buffer))
  -  (with-funcall-else-socket-error
  +  (with-syscall-else-error
         (etypecase buffer
   	((vector (unsigned-byte 8))
   	 (let ((count (- (or end (length buffer)) start))
  
positive.code: 			(foreign-type-size '(:struct can-frame))
  			0
  			sockaddr
  			(foreign-type-size '(:struct can-frame))))))))))))
  
  ;; ssize_t recv(int sockfd, void *buf, size_t len, int flags);
  (defcfun (%recv "recv") ssize-t
  
negative.code: 		 (setf (can-packet-id buffer) can_id
  		       (can-packet-data buffer) data)
  		 (with-foreign-object (tv '(:struct timeval))
  		   (with-syscall-else-error (%ioctl fd +siocgstamp+ tv) +syscall-error+)
  		   (with-foreign-slots ((tv_sec tv_usec) tv (:struct timeval))
  		     (setf (can-packet-timestamp buffer) (list tv_sec tv_usec)))
  		   (with-foreign-object (ifr '(:struct ifreq))
  		     (let* ((ifrdata (foreign-slot-value ifr '(:struct ifreq) 'data)))
  		       (setf (foreign-slot-value ifrdata '(:union ifreq-data) 'ifindex)
  			     (foreign-slot-value sockaddr '(:struct sockaddr-can) 'can_ifindex))
  		       (with-syscall-else-error (%ioctl fd +siocgifname+ ifr) +socket-error+)
  		       (setf (can-packet-origin buffer)
  			     (foreign-string-to-lisp (foreign-slot-value ifr '(:struct ifreq) 'name)))
  		       (values sts (foreign-slot-value ifr '(:struct ifreq) 'name))))))))))))))
  