Commit bb40da9f authored by Michał Herda's avatar Michał Herda 🤔
Browse files

Fix GET-PROTOCOL-BY-NAME with unknown protocols

The function SB-BSD-SOCKETS:GET-PROTOCOL-BY-NAME did not signal
an error when it was unable to find a protocol. This is fixed now
and an error of type UNKNOWN-PROTOCOL, with an accessor named
UNKNOWN-PROTOCOL-NAME, is being signaled. These two names are also
exported from the package SB-BSD-SOCKETS.

A test case is added.

Several other test cases are fixed with regard to :NO-ERROR clauses
parent 1effa6a1
......@@ -17,6 +17,7 @@
......@@ -571,17 +571,27 @@ safe_buffer_pointer(cl_object x, cl_index size)
;; We could refactor a lot here, if we pass sockaddr_foo structs around in Lisp. But
;; I do not feel comfortable with that.
(define-condition unknown-protocol (error)
((name :initarg :name
:reader unknown-protocol-name))
(:report (lambda (condition stream)
(format stream "Protocol not found: ~A"
(prin1-to-string (unknown-protocol-name condition))))))
(defun get-protocol-by-name (string-or-symbol)
"Calls getprotobyname"
(let ((string (string string-or-symbol)))
(c-inline (string) (:cstring) :int
struct protoent *pe;
pe = getprotobyname(#0);
@(return 0) = pe ? pe->p_proto : -1;
(let* ((string (string string-or-symbol))
(proto-num (c-inline (string) (:cstring) :int
struct protoent *pe;
pe = getprotobyname(#0);
@(return 0) = pe ? pe->p_proto : -1;
(if (= proto-num -1)
(error 'unknown-protocol :name string)
;; getprotobyname is not yet implemented on bionic
(let ((proto (string-downcase (if (symbolp string-or-symbol)
......@@ -27,6 +27,13 @@
(equalp (make-inet-address "") #(242 1 211 3))
(deftest get-protocol-by-name-unknown-protocol
(let ((protocol-name "totally-unknown-protocol"))
(handler-case (get-protocol-by-name protocol-name)
(unknown-protocol (c) (string= protocol-name (unknown-protocol-name c)))
(:no-error (&rest args) (declare (ignore args)) nil)))
(deftest make-inet-socket
;; make a socket
(let ((s (make-instance 'inet-socket :type :stream :protocol (get-protocol-by-name "tcp"))))
......@@ -46,7 +53,7 @@
(make-instance 'inet-socket :type :stream :protocol (get-protocol-by-name "udp"))
((or socket-type-not-supported-error protocol-not-supported-error) (c)
(declare (ignorable c)) t)
(:no-error nil))
(:no-error (&rest args) (declare (ignore args)) nil))
(deftest make-inet-socket-keyword-wrong
......@@ -55,7 +62,7 @@
(make-instance 'inet-socket :type :stream :protocol :udp)
((or protocol-not-supported-error socket-type-not-supported-error) (c)
(declare (ignorable c)) t)
(:no-error nil))
(:no-error (&rest args) (declare (ignore args)) nil))
......@@ -194,7 +201,7 @@
(get-host-by-name "")
(:no-error nil))
(:no-error (&rest args) (declare (ignore args)) nil))
(defun http-stream (host port request)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment