Commit 5df715f9 authored by marijnh's avatar marijnh
Browse files

fix socket leak in a nicer way

darcs-hash:c8e6aabb8c1bc7e2db972262f46993477f8b9262
parent 42bda815
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -21,17 +21,20 @@
		  (lambda (c) (error 'socket-error :nested-error c)))
		 (sb-bsd-sockets:name-service-error 
		  (lambda (c) (error 'socket-error :nested-error c))))
    (let ((s (make-instance 'sb-bsd-sockets:inet-socket
    (let ((socket (make-instance 'sb-bsd-sockets:inet-socket
				 :type :stream
			    :protocol protocol))
	  (me (resolve-hostname local-host)))
				 :protocol protocol)))
      (unwind-protect
	   (let ((me (resolve-hostname local-host)))
	     (unless (and (equal me #(0 0 0 0)) (eql local-port 0))
	(sb-bsd-sockets:socket-bind s me local-port))
      (sb-bsd-sockets:socket-connect
       s (resolve-hostname peer-host) peer-port)
      (sb-bsd-sockets:socket-make-stream  s :input t :output t
	       (sb-bsd-sockets:socket-bind socket me local-port))
	     (sb-bsd-sockets:socket-connect socket (resolve-hostname peer-host) peer-port)
	     (prog1 (sb-bsd-sockets:socket-make-stream  socket :input t :output t
							:element-type element-type
					  :buffering :full))))
							:external-format external-format
							:buffering :full)
	       (setf socket nil)))
	(when socket (sb-bsd-sockets:socket-close socket))))))

(defun open-server (&key (host :any) (port 0)
			 (reuse-address t)