projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.9.10.20:
[sbcl.git]
/
contrib
/
sb-bsd-sockets
/
inet.lisp
diff --git
a/contrib/sb-bsd-sockets/inet.lisp
b/contrib/sb-bsd-sockets/inet.lisp
index
51e79d3
..
5879341
100644
(file)
--- a/
contrib/sb-bsd-sockets/inet.lisp
+++ b/
contrib/sb-bsd-sockets/inet.lisp
@@
-27,6
+27,13
@@
Examples:
#'parse-integer
(split dotted-quads nil '(#\.))))
#'parse-integer
(split dotted-quads nil '(#\.))))
+(define-condition unknown-protocol ()
+ ((name :initarg :name
+ :reader unknown-protocol-name))
+ (:report (lambda (c s)
+ (format s "Protocol not found: ~a" (prin1-to-string
+ (unknown-protocol-name c))))))
+
;;; getprotobyname only works in the internet domain, which is why this
;;; is here
(defun get-protocol-by-name (name) ;exported
;;; getprotobyname only works in the internet domain, which is why this
;;; is here
(defun get-protocol-by-name (name) ;exported
@@
-35,6
+42,8
@@
using getprotobyname(2) which typically looks in NIS or /etc/protocols"
;; for extra brownie points, could return canonical protocol name
;; and aliases as extra values
(let ((ent (sockint::getprotobyname name)))
;; for extra brownie points, could return canonical protocol name
;; and aliases as extra values
(let ((ent (sockint::getprotobyname name)))
+ (if (sb-grovel::foreign-nullp ent)
+ (error 'unknown-protocol :name name))
(sockint::protoent-proto ent)))
;;; our protocol provides make-sockaddr-for, size-of-sockaddr,
(sockint::protoent-proto ent)))
;;; our protocol provides make-sockaddr-for, size-of-sockaddr,
@@
-52,7
+61,7
@@
using getprotobyname(2) which typically looks in NIS or /etc/protocols"
;; We have no truck with such dreadful type punning. Octets to
;; octets, dust to dust.
;; We have no truck with such dreadful type punning. Octets to
;; octets, dust to dust.
-
+
(setf (sockint::sockaddr-in-family sockaddr) sockint::af-inet)
(setf (sb-alien:deref (sockint::sockaddr-in-port sockaddr) 0) (ldb (byte 8 8) port))
(setf (sb-alien:deref (sockint::sockaddr-in-port sockaddr) 1) (ldb (byte 8 0) port))
(setf (sockint::sockaddr-in-family sockaddr) sockint::af-inet)
(setf (sb-alien:deref (sockint::sockaddr-in-port sockaddr) 0) (ldb (byte 8 8) port))
(setf (sb-alien:deref (sockint::sockaddr-in-port sockaddr) 1) (ldb (byte 8 0) port))
@@
-73,11
+82,11
@@
using getprotobyname(2) which typically looks in NIS or /etc/protocols"
"Returns address and port of SOCKADDR as multiple values"
(values
(coerce (loop for i from 0 below 4
"Returns address and port of SOCKADDR as multiple values"
(values
(coerce (loop for i from 0 below 4
- collect (sb-alien:deref (sockint::sockaddr-in-addr sockaddr) i))
- '(vector (unsigned-byte 8) 4))
+ collect (sb-alien:deref (sockint::sockaddr-in-addr sockaddr) i))
+ '(vector (unsigned-byte 8) 4))
(+ (* 256 (sb-alien:deref (sockint::sockaddr-in-port sockaddr) 0))
(sb-alien:deref (sockint::sockaddr-in-port sockaddr) 1))))
(+ (* 256 (sb-alien:deref (sockint::sockaddr-in-port sockaddr) 0))
(sb-alien:deref (sockint::sockaddr-in-port sockaddr) 1))))
-
+
(defun make-inet-socket (type protocol)
"Make an INET socket. Deprecated in favour of make-instance"
(make-instance 'inet-socket :type type :protocol protocol))
(defun make-inet-socket (type protocol)
"Make an INET socket. Deprecated in favour of make-instance"
(make-instance 'inet-socket :type type :protocol protocol))