- for code = (char-code char)
- do (write-byte code socket)
- finally (write-byte 0 socket)))
-
-(defmethod send-socket-value ((type (eql 'limstring)) socket (value string))
- (loop for char across value
- for code = (char-code char)
- do (write-byte code socket)))
-
-(defmethod send-socket-value ((type (eql 'byte)) socket (value integer))
- (write-byte value socket))
-
-(defmethod send-socket-value ((type (eql 'byte)) socket (value character))
- (write-byte (char-code value) socket))
-
-(defmethod send-socket-value ((type (eql 'byte)) socket value)
- (write-sequence value socket))
-
-(defgeneric read-socket-value (type socket))
-
-(defmethod read-socket-value ((type (eql 'int32)) socket)
+ for code = (char-code char)
+ do (write-byte code socket)
+ finally (write-byte 0 socket))
+ #+sb-unicode
+ (write-sequence (sb-ext:string-to-octets value :null-terminate t) socket)
+ nil)
+
+(defun send-socket-value-limstring (socket value limit)
+ (declare (type stream socket)
+ (type string value)
+ (type fixnum limit))
+ (let ((length (length value)))
+ (dotimes (i (min length limit))
+ (let ((code (char-code (char value i))))
+ (write-byte code socket)))
+ (dotimes (i (- limit length))
+ (write-byte 0 socket)))
+ nil)
+
+
+(defun read-socket-value-int32 (socket)
+ (declare (type stream socket))
+ (declare (optimize (speed 3)))