Author: psmith
Date: Thu Mar 1 19:50:07 2007
New Revision: 104
Modified:
branches/home/psmith/restructure/src/io/async-socket.lisp
Log:
Improved error-handling on %socket
Modified: branches/home/psmith/restructure/src/io/async-socket.lisp
==============================================================================
--- branches/home/psmith/restructure/src/io/async-socket.lisp (original)
+++ branches/home/psmith/restructure/src/io/async-socket.lisp Thu Mar 1 19:50:07 2007
@@ -96,6 +96,11 @@
(socklent :int))
+(define-condition fd-error (error)
+ ((error-number :initarg :error)))
+
+
+
;;TODO put backlog on config
(defun start-listen (socket-fd &optional (backlog 1000))
(%listen socket-fd backlog))
@@ -104,7 +109,12 @@
;;;; IPv4
(defun make-inet-socket (&optional (type :tcp))
- (%socket +af-inet+ (ecase type (:tcp +sock-stream+) (:udp +sock-dgram+)) 0))
+ (let ((fd (%socket +af-inet+ (ecase type (:tcp +sock-stream+) (:udp +sock-dgram+)) 0)))
+ (when (eql fd -1)
+ (perror)
+#+nio-debug (format-log t "async-socket::make-inet-socket - %socket failed (errno ~A)~%" )
+ (error (make-instance 'fd-error :error (get-errno))))
+ fd))
(defun init-inet-socket(sa port addr)
@@ -133,7 +143,7 @@
nil)))
(defun connect-inet-socket (socket-fd node)
- (format-log t "async-socket:connect-inet-socket ccalled with ~A, and ~A~%" socket-fd node)
+ (format-log t "async-socket:connect-inet-socket called with ~A, and ~A~%" socket-fd node)
(with-foreign-object (sa 'sockaddr-in)
(init-inet-socket sa (remote-port node) (remote-host node))
(let ((res (%connect socket-fd sa +sockaddr-in-len+)))
@@ -221,3 +231,13 @@
(foreign-free len)
(if (>= res 0) async-fd nil)
)))))))
+
+
+
+(defun test-socket-connect(close)
+ (format t "Got fd's :")
+ (loop for i from 1 to 1025 do
+ (let ((fd (make-inet-socket)))
+ (format t "~A " fd)
+ (when (and close fd)
+ (close-fd fd)))))
\ No newline at end of file