0.8.12.40:
[sbcl.git] / contrib / sb-bsd-sockets / local.lisp
1 (in-package :sb-bsd-sockets)
2
3 #|| <h2>Local (unix) domain sockets</h2>
4
5 Local domain (AF_LOCAL) sockets are also known as Unix-domain sockets, but were
6 renamed by POSIX presumably on the basis that they may be
7 available on other systems too.  
8
9 A local socket address is a string, which is used to create a node
10 in the local filesystem.  This means of course that they cannot be used across
11 a network.
12
13 ||#
14
15 (defclass local-socket (socket)
16   ((family :initform sockint::af-local)))
17
18 (defmethod make-sockaddr-for ((socket local-socket) &optional sockaddr &rest address &aux (filename (first address)))
19   (let ((sockaddr (or sockaddr (sockint::allocate-sockaddr-un))))
20     (setf (sockint::sockaddr-un-family sockaddr) sockint::af-local)
21     (when filename
22       (setf (sockint::sockaddr-un-path sockaddr) filename))
23     sockaddr))
24
25 (defmethod free-sockaddr-for ((socket local-socket) sockaddr)
26   (sockint::free-sockaddr-un sockaddr))
27
28 (defmethod size-of-sockaddr ((socket local-socket))
29   sockint::size-of-sockaddr-un)
30
31 (defmethod bits-of-sockaddr ((socket local-socket) sockaddr)
32   "Return the file name of the local socket address SOCKADDR."
33   (let ((name (sockint::sockaddr-un-path sockaddr)))
34     (if (zerop (length name)) nil name)))
35