[Openmcl-devel] [OpenMCL/CCL Devel] Send and receive data via CCL sockets

Karsten Poeck karsten.poeck at gmail.com
Mon Sep 8 12:42:37 PDT 2008

I use the following:
(defun %make-client-socket (host &key port)
  (ccl:make-socket :remote-host host 
                   :remote-port port
                   :type :stream
                   :connect :active
                   :format :bivalent))

(defun %make-server-socket (&key port)
  (ccl:make-socket :local-port port
                   :type :stream
                   :connect :passive
         ;;; at least for debugging
         :nodelay t
         :backlog 5
         :reuse-address t
                   :format :bivalent))

(defun %wait-for-connection (socket)
  (let ((stream (ccl:accept-connection socket :wait t)))

Listener 1
(setq der ( %make-server-socket :port 8000))

( %wait-for-connection der)
 -> Blocks

Listener 2
-> (setq die (%make-client-socket "" :port 8000))
#<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/17) #x30004181F69D>
and listener 1 unblocks
#<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/18) #x30004183FD6D>

and now  on both sides you have streams


In article 
<6921cfbe0809081148h2d850c76g6bb6bec4cb7ca144 at mail.gmail.com>,
 "David Rager" <ragerdl at cs.utexas.edu> wrote:

> Hello,
> Please excuse my extremely naive question.  I've been reading many
> documents over the last week and have yet to find a definitive way to
> send and receive data via sockets in CCL.  How does one send/receive
> data over TCP in CCL?  I got the OpenMCL REPL from 2004ish working (a
> rather nice piece of work btw).  But, now I'd like to do more advanced
> things like send data back instead of a string.
> As a starting point, here's some of what I've been doing:
> In LISP session 0:
> (setf *socket?* (make-socket :local-host "" :local-port 24365
> :remote-host "" remote-port 23459 :connect :passive :type
> :stream :reuse-address t))
> In LISP session 1:
> (setf *socket?* (make-socket :local-host "" :local-port 23459
> :remote-host "" remote-port 24365 :connect :active :type
> :stream :reuse-address t))
> (format *socket* "hello")
> In LISP session 0:
> (read-line *socket* nil nil)
> ; now I hit an error about how *socket* isn't of type stream.  How do
> I make *socket* of type stream?
> I'm almost positive reuse-address is optional (I think t is the default?).
> Thanks!
> David
> If it matters, I'm on the official CCL64 1.2 release (++official release).

More information about the Openmcl-devel mailing list