[Openmcl-cvs-notifications] r13902 - /release/1.5/source/level-1/l1-sockets.lisp

rme at clozure.com rme at clozure.com
Tue Jun 29 18:38:31 UTC 2010


Author: rme
Date: Tue Jun 29 12:38:31 2010
New Revision: 13902

Log:
Revert r13894 and merge r13773: udp sockets only support :binary format.

Modified:
    release/1.5/source/level-1/l1-sockets.lisp

Modified: release/1.5/source/level-1/l1-sockets.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- release/1.5/source/level-1/l1-sockets.lisp (original)
+++ release/1.5/source/level-1/l1-sockets.lisp Tue Jun 29 12:38:31 2010
@@ -452,6 +452,7 @@
 =

 (defmethod socket-type ((stream udp-socket)) :datagram)
 (defmethod socket-connect ((stream udp-socket)) nil)
+(defmethod socket-format ((stream udp-socket)) :binary)
 =

 (defgeneric socket-os-fd (socket)
   (:documentation
@@ -948,16 +949,14 @@
                                 (<=3D subtype x8632::max-8-bit-ivector-sub=
tag))
             #+x8664-target (and (>=3D subtype x8664::min-8-bit-ivector-sub=
tag)
                                 (<=3D subtype x8664::max-8-bit-ivector-sub=
tag))
-      (report-bad-arg buf `(or (array character)
-			       (array (unsigned-byte 8))
+      (report-bad-arg buf '(or (array (unsigned-byte 8))
 			       (array (signed-byte 8))))))
   (values buf offset))
 =

 (defmethod send-to ((socket udp-socket) msg size
-		    &key remote-host remote-port offset (external-format :ISO-8859-1))
+		    &key remote-host remote-port offset)
   "Send a UDP packet over a socket."
   (let ((fd (socket-device socket)))
-    (when (stringp msg) (setf msg (ccl::ENCODE-STRING-TO-OCTETS msg :exter=
nal-format external-format)))
     (multiple-value-setq (msg offset) (verify-socket-buffer msg offset siz=
e))
     (unless remote-host
       (setq remote-host (or (getf (socket-keys socket) :remote-host)
@@ -973,16 +972,15 @@
 	    (if remote-host (host-as-inet-host remote-host) #$INADDR_ANY))
       (setf (pref sockaddr :sockaddr_in.sin_port)
 	    (if remote-port (port-as-inet-port remote-port "udp") 0))
-            (%stack-block ((bufptr size))
+      (%stack-block ((bufptr size))
         (%copy-ivector-to-ptr msg offset bufptr 0 size)
 	(socket-call socket "sendto"
 	  (with-eagain fd :output
 	    (c_sendto fd bufptr size 0 sockaddr (record-length :sockaddr_in))))))=
))
 =

-(defmethod receive-from ((socket udp-socket) size &key buffer extract offs=
et (encoding #.(lookup-character-encoding :iso-8859-1)))
+(defmethod receive-from ((socket udp-socket) size &key buffer extract offs=
et)
   "Read a UDP packet from a socket. If no packets are available, wait for
-  a packet to arrive. =

-  Returns four values:
+a packet to arrive. Returns four values:
   The buffer with the data
   The number of bytes read
   The 32-bit unsigned IP address of the sender of the data
@@ -1004,21 +1002,16 @@
       (setf (pref sockaddr :sockaddr_in.sin_port) 0)
       (setf (pref namelen :signed) (record-length :sockaddr_in))
       (%stack-block ((bufptr size))
-        (setq ret-size (socket-call socket "recvfrom"
-                                    (with-eagain fd :input
-                                      (c_recvfrom fd bufptr size 0 sockadd=
r namelen))))
-        (unless vec
-          (setq vec (make-array ret-size
-                                :element-type
-                                (ecase (socket-format socket)
-                                  ((:text) 'base-char)
-                                  ((:binary :bivalent) '(unsigned-byte 8))=
))
-                vec-offset 0))
-        =

-        (ecase (socket-format socket)
-          ((:text) (funcall (character-encoding-memory-decode-function enc=
oding) bufptr ret-size 0 vec))
-          ((:binary (%copy-ptr-to-ivector bufptr 0 vec vec-offset ret-size=
)))))
-      =

+	(setq ret-size (socket-call socket "recvfrom"
+			 (with-eagain fd :input
+			   (c_recvfrom fd bufptr size 0 sockaddr namelen))))
+	(unless vec
+	  (setq vec (make-array ret-size
+				:element-type
+				(ecase (socket-format socket)
+				  ((:binary) '(unsigned-byte 8))))
+		vec-offset 0))
+	(%copy-ptr-to-ivector bufptr 0 vec vec-offset ret-size))
       (values (cond ((null buffer)
 		     vec)
 		    ((or (not extract)



More information about the Openmcl-cvs-notifications mailing list