Changeset 5305


Ignore:
Timestamp:
Oct 6, 2006, 3:40:46 AM (18 years ago)
Author:
Gary Byers
Message:

basic (vs fundamental) socket streams.

File:
1 edited

Legend:

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

    r5225 r5305  
    6969  (defun %bswap32 (x)
    7070    (declare (type (unsigned-byte 32) x))
    71     (dpb (ldb (byte 8 0) x)
    72          (byte 8 24)
    73          (dpb (ldb (byte 8 8) x)
    74               (byte 8 16)
    75               (dpb (ldb (byte 8 16) x)
    76                    (byte 8 8)
    77                    (ldb (byte 8 24) x)))))
     71    (%swap-u32 x))
    7872  (defun %bswap16 (x)
    7973    (declare (type (unsigned-byte 16) x))
    80     (dpb (ldb (byte 8 0) x)
    81          (byte 8 8)
    82          (ldb (byte 8 8) x)))
     74    (%swap-u16 x))
    8375  (defmacro HTONL (x) `(%bswap32 ,x))
    8476  (defmacro HTONS (x) `(%bswap16 ,x))
     
    294286
    295287;;; An active TCP socket is an honest-to-goodness stream.
    296 (defclass tcp-stream (tcp-socket fd-stream
    297                                  buffered-binary-io-stream-mixin
    298                                  buffered-character-io-stream-mixin)
     288(defclass tcp-stream (tcp-socket)
    299289  ())
    300290
     291(defclass fundamental-tcp-stream (tcp-stream
     292                                  fd-stream
     293                                  buffered-binary-io-stream-mixin
     294                                  buffered-character-io-stream-mixin)
     295    ())
     296
     297(make-built-in-class 'basic-tcp-stream
     298                     'tcp-stream
     299                     'basic-binary-io-stream
     300                     'basic-character-io-stream)
     301
    301302(defgeneric socket-connect (stream)
    302   (:documentation
     303 (:documentation
    303304   "Return :active for tcp-stream, :passive for listener-socket, and NIL
    304305for udp-socket"))
     
    326327  ;; Yes, in general.  There is.
    327328  (assert (and in-p out-p) () "Non-bidirectional tcp stream?")
    328   'tcp-stream)
     329  'fundamental-tcp-stream)
     330
     331(defmethod map-to-basic-stream-class-name ((name (eql 'tcp-stream)))
     332  'basic-tcp-stream)
     333
     334(defmethod select-stream-class ((s (eql 'basic-tcp-stream)) in-p out-p char-p)
     335  (declare (ignore char-p))
     336  (assert (and in-p out-p) () "Non-bidirectional tcp stream?")
     337  'basic-tcp-stream)
    329338
    330339;;; A FILE-SOCKET-STREAM is also honest. To goodness.
    331 (defclass file-socket-stream (stream-file-socket
    332                               fd-stream
    333                               buffered-binary-io-stream-mixin
    334                               buffered-character-io-stream-mixin)
     340(defclass file-socket-stream (stream-file-socket)
    335341  ())
     342
     343(defclass fundamental-file-socket-stream (file-socket-stream
     344                                          fd-stream
     345                                          buffered-binary-io-stream-mixin
     346                                          buffered-character-io-stream-mixin)
     347    ())
     348
     349(make-built-in-class 'basic-file-socket-stream
     350                     'file-socket-stream
     351                     'basic-binary-io-stream
     352                     'basic-character-io-stream)
     353
     354
    336355
    337356(defmethod select-stream-class ((class file-socket-stream) in-p out-p char-p)
    338357  (declare (ignore char-p)) ; TODO: is there any real reason to care about this?
    339358  (assert (and in-p out-p) () "Non-bidirectional tcp stream?")
    340   'file-socket-stream)
     359  'fundamental-file-socket-stream)
    341360
    342361(defclass unconnected-socket (socket)
     
    572591                    keepalive reuse-address nodelay broadcast linger
    573592                    local-port local-host backlog class out-of-band-inline
    574                     local-filename remote-filename sharing)
     593                    local-filename remote-filename sharing basic)
    575594  "Create and return a new socket."
    576595  (declare (dynamic-extent keys))
     
    578597                   keepalive reuse-address nodelay broadcast linger
    579598                   local-port local-host backlog class out-of-band-inline
    580                    local-filename remote-filename sharing))
     599                   local-filename remote-filename sharing basic))
    581600  (ecase address-family
    582601    ((:file) (apply #'make-file-socket keys))
     
    654673                                  format
    655674                                  (class 'tcp-stream)
     675                                  (basic t)
    656676                                  &allow-other-keys)
    657677  (inet-connect fd
    658678                (host-as-inet-host remote-host)
    659679                (port-as-inet-port remote-port "tcp"))
    660   (make-tcp-stream fd :format format :eol eol :class class))
     680  (make-tcp-stream fd :format format :eol eol :class class :basic basic))
    661681
    662682(defun make-file-stream-socket (fd &key remote-filename
     
    664684                                   format
    665685                                   (class 'file-socket-stream)
     686                                   (basic t)
    666687                                   &allow-other-keys)
    667688  (file-socket-connect fd remote-filename)
    668   (make-file-socket-stream fd :format format :eol eol :class class))
    669 
    670 
    671 (defun make-tcp-stream (fd &key format eol (class 'tcp-stream) sharing &allow-other-keys)
     689  (make-file-socket-stream fd :format format :eol eol :class class :basic basic))
     690
     691
     692(defun make-tcp-stream (fd &key format eol (class 'tcp-stream) sharing (basic t) &allow-other-keys)
    672693  (declare (ignore eol))                ;???
    673694  (let ((element-type (ecase format
     
    681702                    :element-type element-type
    682703                    :sharing sharing
    683                     :character-p t)))
    684 
    685 (defun make-file-socket-stream (fd &key format eol (class 'file-socket-stream)  sharing &allow-other-keys)
     704                    :character-p t
     705                    :basic basic)))
     706
     707(defun make-file-socket-stream (fd &key format eol (class 'file-socket-stream)  sharing basic &allow-other-keys)
    686708  (declare (ignore eol))                ;???
    687709  (let ((element-type (ecase format
     
    695717                    :element-type element-type
    696718                    :sharing sharing
    697                     :character-p t)))
     719                    :character-p t
     720                    :basic basic)))
    698721
    699722(defun make-tcp-listener-socket (fd &rest keys &key backlog &allow-other-keys)
Note: See TracChangeset for help on using the changeset viewer.