r11204: 22 Sep 2006 Kevin Rosenberg <kevin@rosenberg.net>
[kmrcl.git] / sockets.lisp
index f105501777be5e122c3cdf012c5c44ff6ca0b1e9..74b4f36a13c042bc6240d9504465f7edb7f41883 100644 (file)
@@ -84,7 +84,7 @@ setsockopt SO_REUSEADDR if :reuse is not nil"
     (let ((sock (sb-bsd-sockets:socket-accept listener)))
       (values
        (sb-bsd-sockets:socket-make-stream
-       sock :element-type 'base-char :input t :output t)
+       sock :element-type :default :input t :output t)
        sock)))
   #+openmcl 
   (let ((sock (ccl:accept-connection listener :wait t)))
@@ -104,7 +104,7 @@ setsockopt SO_REUSEADDR if :reuse is not nil"
 
 (defun close-passive-socket (socket)
   #+allegro (close socket)
-  #+clisp (close socket)
+  #+clisp (ext:socket-server-close socket)
   #+cmu (unix:unix-close socket)
   #+sbcl (sb-unix:unix-close
          (sb-bsd-sockets:socket-file-descriptor socket))
@@ -115,7 +115,8 @@ setsockopt SO_REUSEADDR if :reuse is not nil"
 
 
 (defun close-active-socket (socket)
-  (close socket))
+  #+sbcl (sb-bsd-sockets:socket-close socket)
+  #-sbcl (close socket))
 
 (defun ipaddr-to-dotted (ipaddr &key values)
   "Convert from 32-bit integer to dotted string."
@@ -133,12 +134,16 @@ setsockopt SO_REUSEADDR if :reuse is not nil"
   (declare (string dotted))
   (if errorp
       (let ((ll (delimited-string-to-list dotted #\.)))
-       (+ (ash (first ll) 24) (ash (second ll) 16)
-          (ash (third ll) 8) (fourth ll)))
+       (+ (ash (parse-integer (first ll)) 24) 
+          (ash (parse-integer (second ll)) 16)
+          (ash (parse-integer (third ll)) 8) 
+          (parse-integer (fourth ll))))
     (ignore-errors
       (let ((ll (delimited-string-to-list dotted #\.)))
-       (+ (ash (first ll) 24) (ash (second ll) 16)
-          (ash (third ll) 8) (fourth ll))))))
+       (+ (ash (parse-integer (first ll)) 24)
+          (ash (parse-integer (second ll)) 16)
+          (ash (parse-integer (third ll)) 8) 
+          (parse-integer (fourth ll)))))))
 
 #+sbcl
 (defun ipaddr-to-hostname (ipaddr &key ignore-cache)
@@ -174,13 +179,16 @@ setsockopt SO_REUSEADDR if :reuse is not nil"
     (sb-bsd-sockets:socket-connect sock (lookup-hostname server) port)
     (values
      (sb-bsd-sockets:socket-make-stream
-      sock :input t :output t :element-type 'base-char)
+      sock :input t :output t :element-type :default)
      sock))
   #+cmu
   (let ((sock (ext:connect-to-inet-socket server port)))
     (values
      (sys:make-fd-stream sock :input t :output t :element-type 'base-char)
      sock))
+  #+clisp
+  (let ((sock (ext:socket-connect port server)))
+    (values sock sock))
   #+openmcl
   (let ((sock (ccl:make-socket :remote-host server :remote-port port )))
     (values sock sock))
@@ -198,6 +206,10 @@ setsockopt SO_REUSEADDR if :reuse is not nil"
   #+sbcl (ipaddr-array-to-dotted 
          (nth-value 0 (sb-bsd-sockets:socket-peername socket)))
   #+cmu (nth-value 0 (ext:get-peer-host-and-port socket))
+  #+clisp (let* ((peer (ext:socket-stream-peer socket t))
+                (stop (position #\Space peer)))
+           ;; 2.37-2.39 had do-not-resolve-p backwards
+           (if stop (subseq peer 0 stop) peer))
   #+openmcl (ccl:remote-host socket)
   )