anchor.diff:  
   Returns the number of bytes actually sent, which can be less than the requested length."
     (declare (type (or (vector (unsigned-byte 8)) foreign-pointer can-packet) buffer))
  -  (etypecase buffer
  -    ((vector (unsigned-byte 8))
  -     (let ((count (- (or end (length buffer)) start)))
  -       (with-foreign-object (p :uint8 count)
  -	 (dotimes (i count)
  -	   (setf (mem-aref p :uint8 i) (aref buffer (+ start i))))
  -	 (let ((sts (%send fd p count 0)))
  -	   (if (= sts +socket-error+)
  -	       (get-last-error)
  -	       sts)))))
  -    (foreign-pointer
  -     (let ((count (- (or end (error "Must provide end when passing pointer"))
  -		     start)))
  -       (let ((sts (%send fd (inc-pointer buffer start) count 0)))
  -	 (if (= sts +socket-error+)
  -	     (get-last-error)
  -	     sts))))
  -    (can-packet
  -     (let* ((id (can-packet-id buffer))
  -	    (payload (can-packet-data buffer))
  -	    (payload-size (length payload)))
  -       (with-foreign-object (frame '(:struct can-frame))  
  -	 (setf (foreign-slot-value frame '(:struct can-frame) 'can_id) id)
  -	 (setf (foreign-slot-value frame '(:struct can-frame) 'can_dlc) payload-size)
  -	 (let ((ptr (foreign-slot-pointer frame '(:struct can-frame) 'data)))	       
  -	   (lisp-array-to-foreign payload ptr `(:array :uint8 ,payload-size)))
  -	 (let ((sts (%write fd frame (foreign-type-size '(:struct can-frame)))))
  -	   (if (= sts +socket-error+)
  -	       (get-last-error)
  -	       sts)))))))
  +  (let ((sts NIL))
  +    (etypecase buffer
  +      ((vector (unsigned-byte 8))
  +       (let ((count (- (or end (length buffer)) start)))
  +	 (with-foreign-object (p :uint8 count)
  +	   (dotimes (i count)
  +	     (setf (mem-aref p :uint8 i) (aref buffer (+ start i))))
  +	   (setq sts (%send fd p count 0)))))      
  +      (foreign-pointer
  +       (let ((count (- (or end (error "Must provide end when passing pointer"))
  +		       start)))
  +	 (setq sts (%send fd (inc-pointer buffer start) count 0))))
  +      (can-packet
  +       (let* ((id (can-packet-id buffer))
  +	      (payload (can-packet-data buffer))
  +	      (payload-size (length payload)))
  +	 (with-foreign-object (frame '(:struct can-frame))  
  +	   (setf (foreign-slot-value frame '(:struct can-frame) 'can_id) id)
  +	   (setf (foreign-slot-value frame '(:struct can-frame) 'can_dlc) payload-size)
  +	   (let ((ptr (foreign-slot-pointer frame '(:struct can-frame) 'data)))	       
  +	     (lisp-array-to-foreign payload ptr `(:array :uint8 ,payload-size)))
  +	   (setq sts (%write fd frame (foreign-type-size '(:struct can-frame))))))))
  +    (if (= sts +socket-error+)
  +	(get-last-error)
  +	sts)))
   	 
   ;; ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
   ;;                const struct sockaddr *dest_addr, socklen_t addrlen);
  
positive.code: 	    (setq sock-addr-pointer p
  		  sock-addr-len len))))	 
  
      (let ((sts (%bind fd sock-addr-pointer sock-addr-len)))
        (if (= sts +socket-error+)
  	  (get-last-error)
  	  nil))))
  
   ;; int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  (defcfun (%connect "connect") :int32
  
negative.code: 
  Returns (values count addr) where
  COUNT ::= number of octets actually received, which can be less tha nthe number requested.
  ADDR ::= remote address or can-interface from which the data was received.
  "
    (declare (type (or (vector (unsigned-byte 8)) foreign-pointer can-packet) buffer))
    (etypecase buffer
  