Ignore:
Timestamp:
Jul 16, 2008, 2:23:08 PM (11 years ago)
Author:
gb
Message:

Conditionalize for Solaris.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/level-1/l1-sockets.lisp

    r8941 r10052  
    159159  #+freebsdx8664-target
    160160  (require "X8664-FREEBSD-SYSCALLS")
     161  #+solarisx8664-target
     162  (require "X8664-SOLARIS-SYSCALLS")
    161163  )
    162164
     
    436438             (when (= #$AF_INET (pref sockaddr :sockaddr_in.sin_family))
    437439               (ecase type
    438                  (:host (ntohl (pref sockaddr :sockaddr_in.sin_addr.s_addr)))
     440                 (:host (ntohl (pref sockaddr
     441                                     #-solaris-target :sockaddr_in.sin_addr.s_addr
     442                                     #+solaris-target #>sockaddr_in.sin_addr.S_un.S_addr)))
    439443                 (:port (ntohs (pref sockaddr :sockaddr_in.sin_port))))))))
    440444
    441445(defun path-from-unix-address (addr)
    442   (when (= #$AF_LOCAL (pref addr :sockaddr_un.sun_family))
     446  (when (= #$AF_UNIX (pref addr :sockaddr_un.sun_family))
    443447    #+darwin-target
    444448    (%str-from-ptr (pref addr :sockaddr_un.sun_path)
     
    472476                   (when (= #$AF_INET (pref sockaddr :sockaddr_in.sin_family))
    473477                     (ecase type
    474                        (:host (ntohl (pref sockaddr :sockaddr_in.sin_addr.s_addr)))
     478                       (:host (ntohl (pref sockaddr
     479                                           #-solaris-target :sockaddr_in.sin_addr.s_addr
     480                                           #+solaris-target #>sockaddr_in.sin_addr.S_un.S_addr)))
    475481                       (:port (ntohs  (pref sockaddr :sockaddr_in.sin_port)))))))))))
    476482
     
    558564        (int-setsockopt fd
    559565                        #+linux-target #$SOL_TCP
    560                         #+(or freebsd-target darwin-target) #$IPPROTO_TCP
     566                        #-linux-target #$IPPROTO_TCP
    561567                        #$TCP_NODELAY 1))
    562568      (when (or local-port local-host)
     
    572578                 (setf (pref sockaddr :sockaddr_in.sin_family) #$AF_INET
    573579                       (pref sockaddr :sockaddr_in.sin_port) port-n
    574                        (pref sockaddr :sockaddr_in.sin_addr.s_addr) host-n)
     580                       (pref sockaddr
     581                             #-solaris-target :sockaddr_in.sin_addr.s_addr
     582                             #+solaris-target #>sockaddr_in.sin_addr.S_un.S_addr
     583                             ) host-n)
    575584                 (socket-call socket "bind" (c_bind fd sockaddr (record-length :sockaddr_in)))))))
    576585    (when (and (eq address-family :file)
     
    651660  (unwind-protect
    652661    (let (socket)
    653       (setq fd (socket-call nil "socket" (c_socket #$PF_LOCAL #$SOCK_STREAM 0)))
     662      (setq fd (socket-call nil "socket" (c_socket #$PF_UNIX #$SOCK_STREAM 0)))
    654663      (apply #'set-socket-options fd keys)
    655664      (setq socket
     
    671680    (setf (pref sockaddr :sockaddr_in.sin_family) #$AF_INET
    672681          (pref sockaddr :sockaddr_in.sin_port) port-n
    673           (pref sockaddr :sockaddr_in.sin_addr.s_addr) host-n)
     682          (pref sockaddr
     683                #-solaris-target :sockaddr_in.sin_addr.s_addr
     684                #+solaris-target #>sockaddr_in.sin_addr.S_un.S_addr
     685                ) host-n)
    674686    (%socket-connect fd sockaddr (record-length :sockaddr_in) timeout-in-milliseconds)))
    675687               
     
    790802                      (or (eql res (- #$ENETDOWN))
    791803                          (eql res (- #+linux-target #$EPROTO
    792                                       #+(or darwin-target freebsd-target) #$EPROTOTYPE))
     804                                      #-linux-target #$EPROTOTYPE))
    793805                          (eql res (- #$ENOPROTOOPT))
    794806                          (eql res (- #$EHOSTDOWN))
    795807                          (eql res (- #+linux-target #$ENONET
    796                                       #+(or darwin-target freebsd-target) #$ENETDOWN))
     808                                      #-linux-target #$ENETDOWN))
    797809                          (eql res (- #$EHOSTUNREACH))
    798810                          (eql res (- #$EOPNOTSUPP))
     
    875887    (rlet ((sockaddr :sockaddr_in))
    876888      (setf (pref sockaddr :sockaddr_in.sin_family) #$AF_INET)
    877       (setf (pref sockaddr :sockaddr_in.sin_addr.s_addr)
     889      (setf (pref sockaddr
     890                  #-solaris-target :sockaddr_in.sin_addr.s_addr
     891                  #+solaris-target #>sockaddr_in.sin_addr.S_un.S_addr)
    878892            (if remote-host (host-as-inet-host remote-host) #$INADDR_ANY))
    879893      (setf (pref sockaddr :sockaddr_in.sin_port)
     
    902916           (namelen :signed))
    903917      (setf (pref sockaddr :sockaddr_in.sin_family) #$AF_INET)
    904       (setf (pref sockaddr :sockaddr_in.sin_addr.s_addr) #$INADDR_ANY)
     918      (setf (pref sockaddr
     919                  #-solaris-target :sockaddr_in.sin_addr.s_addr
     920                  #+solaris-target #>sockaddr_in.sin_addr.S_un.S_addr)
     921            #$INADDR_ANY)
    905922      (setf (pref sockaddr :sockaddr_in.sin_port) 0)
    906923      (setf (pref namelen :signed) (record-length :sockaddr_in))
     
    926943                     (subseq vec vec-offset (+ vec-offset ret-size))))
    927944              ret-size
    928               (ntohl (pref sockaddr :sockaddr_in.sin_addr.s_addr))
     945              (ntohl (pref sockaddr
     946                           #-solaris-target :sockaddr_in.sin_addr.s_addr
     947                           #+solaris-target #>sockaddr_in.sin_addr.S_un.S_addr))
    929948              (ntohs (pref sockaddr :sockaddr_in.sin_port))))))
    930949
     
    11321151;;; seems to lose the :struct, so just using #_ doesn't work (that
    11331152;;; sounds like a bug in the FFI translator.)
    1134 #+(or darwin-target linuxx8664-target freebsd-target)
     1153#+(or darwin-target linuxx8664-target freebsd-target solaris-target)
    11351154(defun _inet_ntoa (addr)
    11361155  (with-macptrs ((p))
     
    11481167                     #-freebsd-target (#_inet_aton name addr)))
    11491168        (unless (eql result 0)
    1150           (pref addr :in_addr.s_addr))))))
     1169          (pref addr
     1170                #-solaris-target :in_addr.s_addr
     1171                #+solaris-target #>in_addr.S_un.S_addr
     1172                ))))))
    11511173
    11521174(defun c_socket_1 (domain type protocol)
    1153   #-linuxppc-target
     1175  #-(or linuxppc-target solaris-target)
    11541176  (syscall syscalls::socket domain type protocol)
    11551177  #+linuxppc-target
     
    11581180          (paref params (:* :unsigned-long) 1) type
    11591181          (paref params (:* :unsigned-long) 2) protocol)
    1160     (syscall syscalls::socketcall 1 params)))
     1182    (syscall syscalls::socketcall 1 params))
     1183  #+solaris-target
     1184  (syscall syscalls::so_socket domain type protocol +null-ptr+ #$SOV_DEFAULT))
    11611185
    11621186(defun c_socket (domain type protocol)
     
    11811205           (pathlen (sockaddr_un-path-len))
    11821206           (copylen (min (1- pathlen) namelen)))
    1183       (setf (pref addr :sockaddr_un.sun_family) #$AF_LOCAL)
     1207      (setf (pref addr :sockaddr_un.sun_family) #$AF_UNIX)
    11841208      (let* ((sun-path (pref addr :sockaddr_un.sun_path)))
    11851209        (dotimes (i copylen)
     
    12041228
    12051229(defun c_bind (sockfd sockaddr addrlen)
    1206   #+(or darwin-target linuxx8664-target freebsd-target)
     1230  #-linuxppc-target
    12071231  (progn
    12081232    #+(or darwin-target freebsd-target)
     
    12351259           (fd-set-flags sockfd (logior flags #$O_NONBLOCK))
    12361260           (let* ((err
    1237                    #+(or darwin-target linuxx8664-target freebsd-target)
     1261                   #-linuxppc-target
    12381262                   (syscall syscalls::connect sockfd addr len)
    12391263                   #+linuxppc-target
     
    12591283
    12601284(defun c_listen (sockfd backlog)
    1261   #+(or darwin-target linuxx8664-target freebsd-target)
     1285  #-linuxppc-target
    12621286  (syscall syscalls::listen sockfd backlog)
    12631287  #+linuxppc-target
     
    12761300(defun c_accept (sockfd addrp addrlenp)
    12771301  (ignoring-eintr
    1278    #+(or darwin-target linuxx8664-target freebsd-target)
     1302   #-linuxppc-target
    12791303   (syscall syscalls::accept sockfd addrp addrlenp)
    12801304   #+linuxppc-target
     
    12941318
    12951319(defun c_getsockname (sockfd addrp addrlenp)
    1296   #+(or darwin-target linuxx8664-target freebsd-target)
     1320  #-linuxppc-target
    12971321  (syscall syscalls::getsockname sockfd addrp addrlenp)
    12981322  #+linuxppc-target
     
    13121336
    13131337(defun c_getpeername (sockfd addrp addrlenp)
    1314   #+(or darwin-target linuxx8664-target freebsd-target)
     1338  #-linuxppc-target
    13151339  (syscall syscalls::getpeername sockfd addrp addrlenp)
    13161340  #+linuxppc-target
     
    13301354
    13311355(defun c_socketpair (domain type protocol socketsptr)
    1332   #+(or darwin-target linuxx8664-target freebsd-target)
     1356  #-(or linuxppc-target solaris-target)
    13331357  (syscall syscalls::socketpair domain type protocol socketsptr)
    13341358  #+linuxppc-target
     
    13471371            (%%get-unsigned-longlong params 16) protocol
    13481372            (%get-ptr params 24) socketsptr)
    1349       (syscall syscalls::socketcall 8 params))))
     1373      (syscall syscalls::socketcall 8 params)))
     1374  #+solaris-target
     1375  (let* ((fd1 (syscall syscalls::so_socket domain type protocol +null-ptr+ #$SOV_DEFAULT)))
     1376    (if (>= fd1 0)
     1377      (let* ((fd2 (syscall syscalls::so_socket domain type protocol +null-ptr+ #$SOV_DEFAULT)))
     1378        (if (>= fd2 0)
     1379          (progn
     1380            (setf (paref socketsptr (:* :int) 0) fd1
     1381                  (paref socketsptr (:* :int) 1) fd2)
     1382            (let* ((res (syscall syscalls::so_socketpair socketsptr)))
     1383              (when (< res 0)
     1384                (fd-close fd1)
     1385                (fd-close fd2))
     1386              res))
     1387          (progn
     1388            (fd-close fd1)
     1389            fd2)))
     1390      fd1)))
     1391
    13501392
    13511393
    13521394
    13531395(defun c_sendto (sockfd msgptr len flags addrp addrlen)
    1354   #+(or darwin-target linuxx8664-target freebsd-target)
     1396  #-linuxppc-target
    13551397  (syscall syscalls::sendto sockfd msgptr len flags addrp addrlen)
    13561398  #+linuxppc-target
     
    13761418
    13771419(defun c_recvfrom (sockfd bufptr len flags addrp addrlenp)
    1378   #+(or darwin-target linuxx8664-target freebsd-target)
     1420  #-linuxppc-target
    13791421  (syscall syscalls::recvfrom sockfd bufptr len flags addrp addrlenp)
    13801422  #+linuxppc-target
     
    14001442
    14011443(defun c_shutdown (sockfd how)
    1402   #+(or darwin-target linuxx8664-target freebsd-target)
     1444  #-linuxppc-target
    14031445  (syscall syscalls::shutdown sockfd how)
    14041446  #+linuxppc-target
     
    14161458
    14171459(defun c_setsockopt (sockfd level optname optvalp optlen)
    1418   #+(or darwin-target linuxx8664-target freebsd-target)
     1460  #-linux-ppc-target
    14191461  (syscall syscalls::setsockopt sockfd level optname optvalp optlen)
    14201462  #+linuxppc-target
     
    14381480
    14391481(defun c_getsockopt (sockfd level optname optvalp optlenp)
    1440   #+(or darwin-target linuxx8664-target freebsd-target)
     1482  #-linuxppc-target
    14411483  (syscall syscalls::getsockopt sockfd level optname optvalp optlenp)
    14421484  #+linuxppc-target
     
    14601502
    14611503(defun c_sendmsg (sockfd msghdrp flags)
    1462   #+(or darwin-target linuxx8664-target freebsd-target)
     1504  #-linuxppc-target
    14631505  (syscall syscalls::sendmsg sockfd msghdrp flags)
    14641506  #+linuxppc-target
     
    14781520
    14791521(defun c_recvmsg (sockfd msghdrp flags)
    1480   #+(or darwin-target linuxx8664-target freebsd-target)
     1522  #-linuxppc-target
    14811523  (syscall syscalls::recvmsg sockfd msghdrp flags)
    14821524  #+linuxppc-target
     
    15101552    (format t " ~2,'0x" (%get-byte p i))))
    15111553
     1554#-solaris-target
    15121555(defun %get-ip-interfaces ()
    15131556  (rlet ((p :address (%null-ptr)))
     
    15211564                          (eql (pref addr :sockaddr.sa_family) #$AF_INET))
    15221565                 (push (make-ip-interface
    1523                                    :name (%get-cstring (pref q :ifaddrs.ifa_name))
    1524                                    :addr (pref addr :sockaddr_in.sin_addr.s_addr)
    1525                                    :netmask (pref (pref q :ifaddrs.ifa_netmask)
    1526                                                   :sockaddr_in.sin_addr.s_addr)
    1527                                    :flags (pref q :ifaddrs.ifa_flags)
    1528                                    :address-family #$AF_INET)
    1529                        res))))
    1530         (#_freeifaddrs (pref p :address))))))
     1566                        :name (%get-cstring (pref q :ifaddrs.ifa_name))
     1567                        :addr (pref addr
     1568                                    #-solaris-target :sockaddr_in.sin_addr.s_addr
     1569                                    #+solaris-target #>sockaddr_in.sin_addr.S_un.S_addr))
     1570                                   
     1571                       :netmask (pref (pref q :ifaddrs.ifa_netmask)
     1572                                      :sockaddr_in.sin_addr.s_addr)
     1573                       :flags (pref q :ifaddrs.ifa_flags)
     1574                       :address-family #$AF_INET)
     1575                 res)))
     1576      (#_freeifaddrs (pref p :address))))))
    15311577
    15321578
Note: See TracChangeset for help on using the changeset viewer.