[usocket-cvs] r177 - usocket/trunk/backend
ehuelsmann at common-lisp.net
ehuelsmann at common-lisp.net
Fri Jan 19 19:38:42 UTC 2007
Author: ehuelsmann
Date: Fri Jan 19 14:38:40 2007
New Revision: 177
Modified:
usocket/trunk/backend/scl.lisp
Log:
Server side socket support for Scieneer (and re-indenting).
Modified: usocket/trunk/backend/scl.lisp
==============================================================================
--- usocket/trunk/backend/scl.lisp (original)
+++ usocket/trunk/backend/scl.lisp Fri Jan 19 14:38:40 2007
@@ -24,7 +24,6 @@
"Dispatch correct usocket condition."
(etypecase condition
(ext::socket-error
- (format t "erron: ~D~%" (ext::socket-errno condition))
(scl-map-socket-error (ext::socket-errno condition)
:socket socket
:condition condition))
@@ -34,15 +33,31 @@
:socket socket))))
(defun socket-connect (host port &key (element-type 'character))
- (let* ((socket
- (with-mapped-conditions (nil)
- (ext:connect-to-inet-socket (host-to-hbo host) port :kind :stream)))
- (stream (sys:make-fd-stream socket :input t :output t
- :element-type element-type
- :buffering :full)))
- ;;###FIXME the above line probably needs an :external-format
+ (let* ((socket (with-mapped-conditions ()
+ (ext:connect-to-inet-socket (host-to-hbo host) port
+ :kind :stream)))
+ (stream (sys:make-fd-stream socket :input t :output t
+ :element-type element-type
+ :buffering :full)))
(make-stream-socket :socket socket :stream stream)))
+(defun socket-listen (host port &key reuseaddress (backlog 5))
+ (let* ((host (if (eql host *wildcard-host*)
+ 0
+ (host-to-hbo host)))
+ (server-sock (ext:create-inet-listener port :stream
+ :host host
+ :reuse-address reuseaddress
+ :backlog backlog)))
+ (make-stream-server-socket server-sock)))
+
+(defmethod socket-accept ((usocket stream-server-usocket))
+ (let* ((sock (ext:accept-tcp-connection (socket usocket)))
+ (stream (sys:make-fd-stream sock :input t :output t
+ :element-type (element-type usocket)
+ :buffering :full)))
+ (make-stream-socket :socket sock :stream stream)))
+
(defmethod socket-close ((usocket usocket))
"Close socket."
(with-mapped-conditions (usocket)
@@ -51,13 +66,13 @@
(defmethod get-local-name ((usocket usocket))
(multiple-value-bind (address port)
(with-mapped-conditions (usocket)
- (ext:get-socket-host-and-port (socket usocket)))
+ (ext:get-socket-host-and-port (socket usocket)))
(values (hbo-to-vector-quad address) port)))
(defmethod get-peer-name ((usocket usocket))
(multiple-value-bind (address port)
(with-mapped-conditions (usocket)
- (ext:get-peer-host-and-port (socket usocket)))
+ (ext:get-peer-host-and-port (socket usocket)))
(values (hbo-to-vector-quad address) port)))
(defmethod get-local-address ((usocket usocket))
@@ -77,25 +92,25 @@
(multiple-value-bind (host errno)
(ext:lookup-host-entry (host-byte-order address))
(cond (host
- (ext:host-entry-name host))
- (t
- (let ((condition (cdr (assoc errno +unix-ns-error-map+))))
- (cond (condition
- (error condition :host-or-ip address))
- (t
- (error 'ns-unknown-error :host-or-ip address
- :real-error errno))))))))
+ (ext:host-entry-name host))
+ (t
+ (let ((condition (cdr (assoc errno +unix-ns-error-map+))))
+ (cond (condition
+ (error condition :host-or-ip address))
+ (t
+ (error 'ns-unknown-error :host-or-ip address
+ :real-error errno))))))))
(defun get-hosts-by-name (name)
(multiple-value-bind (host errno)
(ext:lookup-host-entry name)
(cond (host
- (mapcar #'hbo-to-vector-quad
- (ext:host-entry-addr-list host)))
- (t
- (let ((condition (cdr (assoc errno +unix-ns-error-map+))))
- (cond (condition
- (error condition :host-or-ip name))
- (t
- (error 'ns-unknown-error :host-or-ip name
- :real-error errno))))))))
+ (mapcar #'hbo-to-vector-quad
+ (ext:host-entry-addr-list host)))
+ (t
+ (let ((condition (cdr (assoc errno +unix-ns-error-map+))))
+ (cond (condition
+ (error condition :host-or-ip name))
+ (t
+ (error 'ns-unknown-error :host-or-ip name
+ :real-error errno))))))))
More information about the usocket-cvs
mailing list