I need to connect to a UNIX domain socket using usocket. Here is what I came up with to make it work in SBCL. Should this be done in another function?
Index: backend/sbcl.lisp =================================================================== --- backend/sbcl.lisp (révision 423) +++ backend/sbcl.lisp (copie de travail) @@ -213,8 +213,12 @@ (not (fboundp 'sb-bsd-sockets::sockopt-tcp-nodelay))) (unsupported 'nodelay 'socket-connect))
- (let* ((socket (make-instance 'sb-bsd-sockets:inet-socket - :type :stream :protocol :tcp)) + (let* ((socket (typecase host + (pathname + (make-instance 'sb-bsd-sockets:local-socket :type :stream)) + (t + (make-instance 'sb-bsd-sockets:inet-socket + :type :stream :protocol :tcp)))) (stream (sb-bsd-sockets:socket-make-stream socket :input t :output t @@ -222,7 +226,9 @@ :element-type element-type)) ;;###FIXME: The above line probably needs an :external-format (usocket (make-stream-socket :stream stream :socket socket)) - (ip (host-to-vector-quad host))) + (raw-address (typecase host + (pathname (list (namestring host))) + (t (list (host-to-vector-quad host) port))))) (when (and nodelay-specified (fboundp 'sb-bsd-sockets::sockopt-tcp-nodelay)) (setf (sb-bsd-sockets:sockopt-tcp-nodelay socket) nodelay)) @@ -232,7 +238,7 @@ (or local-host *wildcard-host*)) (or local-port *auto-port*))) (with-mapped-conditions (usocket) - (sb-bsd-sockets:socket-connect socket ip port)) + (apply 'sb-bsd-sockets:socket-connect socket raw-address)) usocket))
(defun socket-listen (host port