From fc4f53506a834e17d529de3556053e0b757a828a Mon Sep 17 00:00:00 2001 From: "hechee@blackhole.universe.org" <> Date: Sun, 30 Jul 2006 20:51:15 +0200 Subject: [PATCH] Implemented a basic version of make-socket. --- sockets/make-socket.lisp | 21 ++++++++++++++++++--- sockets/net.sockets.asd | 3 +-- sockets/socket-methods.lisp | 18 +++++++++--------- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/sockets/make-socket.lisp b/sockets/make-socket.lisp index 6d0de56..1bf274c 100644 --- a/sockets/make-socket.lisp +++ b/sockets/make-socket.lisp @@ -24,6 +24,21 @@ (in-package #:net.sockets) -;; (defun make-socket (&rest args &key address-family type -;; connect (ipv6 *ipv6*)) -;; ) +(defun make-socket (&key + (address-family :internet) + (type :stream) + (connect :active) + (protocol :default) + (ipv6 *ipv6*)) + (check-type address-family (member :internet :local)) + (check-type type (member :stream :datagram)) + (check-type connect (member :active :passive)) + (check-type ipv6 (member nil t :ipv6)) + (when (eql address-family :internet) + (cond + ((null ipv6) (setf address-family :ipv4)) + (t (setf address-family :ipv6)))) + + (let ((socket-class + (select-socket-type address-family type connect protocol))) + (make-instance socket-class))) diff --git a/sockets/net.sockets.asd b/sockets/net.sockets.asd index c77d0fe..395fedf 100644 --- a/sockets/net.sockets.asd +++ b/sockets/net.sockets.asd @@ -28,5 +28,4 @@ :depends-on ("defpackage" "config" "common" "address" "base-sockets" "socket-options")) (:file "make-socket" - :depends-on ("defpackage" "config" "common" "address" - "base-sockets" "socket-options" "socket-methods")))) + :depends-on ("defpackage" "config" "socket-methods")))) diff --git a/sockets/socket-methods.lisp b/sockets/socket-methods.lisp index 55f7f89..960346f 100644 --- a/sockets/socket-methods.lisp +++ b/sockets/socket-methods.lisp @@ -25,15 +25,15 @@ (in-package #:net.sockets) (defparameter *socket-type-map* - '(((:ipv4 :stream :active :default) . socket-stream-internet-active) - ((:ipv6 :stream :active :default) . socket-stream-internet-active) - ((:ipv4 :stream :passive :default) . socket-stream-internet-passive) - ((:ipv6 :stream :passive :default) . socket-stream-internet-passive) - ((:unix :stream :active :default) . socket-stream-local-active) - ((:unix :stream :passive :default) . socket-stream-local-passive) - ((:unix :datagram :active :default) . socket-datagram-local-active) - ((:ipv4 :datagram :active :default) . socket-datagram-internet-active) - ((:ipv6 :datagram :active :default) . socket-datagram-internet-active))) + '(((:ipv4 :stream :active :default) . socket-stream-internet-active) + ((:ipv6 :stream :active :default) . socket-stream-internet-active) + ((:ipv4 :stream :passive :default) . socket-stream-internet-passive) + ((:ipv6 :stream :passive :default) . socket-stream-internet-passive) + ((:local :stream :active :default) . socket-stream-local-active) + ((:local :stream :passive :default) . socket-stream-local-passive) + ((:local :datagram :active :default) . socket-datagram-local-active) + ((:ipv4 :datagram :active :default) . socket-datagram-internet-active) + ((:ipv6 :datagram :active :default) . socket-datagram-internet-active))) (defun select-socket-type (family type connect protocol) (or (cdr (assoc (list family type connect protocol) *socket-type-map* -- 2.11.4.GIT