[usocket-devel] Re: usocket-devel post from larsnostdal at gmail.com requires approval
Erik Huelsmann
ehuels at gmail.com
Thu Sep 18 15:45:32 UTC 2008
Hi Lars!
Thanks for the report. Sorry for the delay; I finally committed your
fix. I've applied a similar fix to SOCKET-LISTEN.
Bye,
Erik.
On Tue, Aug 26, 2008 at 2:10 PM, <usocket-devel-owner at common-lisp.net> wrote:
> As list administrator, your authorization is requested for the
> following mailing list posting:
>
> List: usocket-devel at common-lisp.net
> From: larsnostdal at gmail.com
> Subject: [Fwd: Don't want FD leaks (patch)]
> Reason: Post by non-member to a members-only list
>
> At your convenience, visit:
>
> http://common-lisp.net/cgi-bin/mailman/admindb/usocket-devel
>
> to approve or deny the request.
>
>
> ---------- Forwarded message ----------
> From: Lars Rune Nøstdal <larsnostdal at gmail.com>
> To: usocket-devel at common-lisp.net
> Date: Tue, 26 Aug 2008 14:11:33 +0200
> Subject: [Fwd: Don't want FD leaks (patch)]
>
>
>
> ---------- Forwarded message ----------
> From: Lars Rune Nøstdal <larsnostdal at gmail.com>
> To:
> Date: Tue, 26 Aug 2008 14:04:09 +0200
> Subject: Don't want FD leaks (patch)
> Hi,
> Noticed that FDs leak in some cases. Quick test and a patch:
>
> (defun test ()
> (loop
> (handler-case
> (let ((socket (usocket:socket-connect "aoeuaoeu.com" 80)))
> (princ socket) (terpri))
> (t (c)
> (format t "do i leak? ~A~%" c)))))
>
>
> I use lsof to test for leaks while this is running:
> lnostdal at blackbox:~/programming/lisp/usocket$ lsof -a -p 25803 | nl
>
> Here is the patch; not tested much but seems to work for me:
>
>
> lnostdal at blackbox:~/programming/lisp/usocket$ svn diff
> Index: backend/sbcl.lisp
> ===================================================================
> --- backend/sbcl.lisp (revision 423)
> +++ backend/sbcl.lisp (working copy)
> @@ -213,27 +213,32 @@
> (not (fboundp 'sb-bsd-sockets::sockopt-tcp-nodelay)))
> (unsupported 'nodelay 'socket-connect))
>
> - (let* ((socket (make-instance 'sb-bsd-sockets:inet-socket
> - :type :stream :protocol :tcp))
> - (stream (sb-bsd-sockets:socket-make-stream socket
> - :input t
> - :output t
> - :buffering :full
> - :element-type element-type))
> - ;;###FIXME: The above line probably needs an :external-format
> - (usocket (make-stream-socket :stream stream :socket socket))
> - (ip (host-to-vector-quad host)))
> - (when (and nodelay-specified
> - (fboundp 'sb-bsd-sockets::sockopt-tcp-nodelay))
> - (setf (sb-bsd-sockets:sockopt-tcp-nodelay socket) nodelay))
> - (when (or local-host local-port)
> - (sb-bsd-sockets:socket-bind socket
> - (host-to-vector-quad
> - (or local-host *wildcard-host*))
> - (or local-port *auto-port*)))
> - (with-mapped-conditions (usocket)
> - (sb-bsd-sockets:socket-connect socket ip port))
> - usocket))
> + (let ((socket (make-instance 'sb-bsd-sockets:inet-socket
> + :type :stream :protocol :tcp)))
> + (handler-case
> + (let* ((stream (sb-bsd-sockets:socket-make-stream socket
> + :input t
> + :output t
> + :buffering :full
> + :element-type element-type))
> + ;;###FIXME: The above line probably needs an :external-format
> + (usocket (make-stream-socket :stream stream :socket socket))
> + (ip (host-to-vector-quad host)))
> + (when (and nodelay-specified
> + (fboundp 'sb-bsd-sockets::sockopt-tcp-nodelay))
> + (setf (sb-bsd-sockets:sockopt-tcp-nodelay socket) nodelay))
> + (when (or local-host local-port)
> + (sb-bsd-sockets:socket-bind socket
> + (host-to-vector-quad
> + (or local-host *wildcard-host*))
> + (or local-port *auto-port*)))
> + (with-mapped-conditions (usocket)
> + (sb-bsd-sockets:socket-connect socket ip port))
> + usocket)
> + (t (c)
> + ;; Make sure we don't leak filedescriptors.
> + (sb-bsd-sockets:socket-close socket)
> + (error c)))))
>
> (defun socket-listen (host port
> &key reuseaddress
>
>
>
> --
> Lars Rune Nøstdal || AJAX/Comet GUI type stuff for Common Lisp
> http://nostdal.org/ || http://groups.google.com/group/symbolicweb
>
>
> ---------- Forwarded message ----------
> From: usocket-devel-request at common-lisp.net
> To:
> Date:
> Subject: confirm c133299de2b1ebf623d1c8e5ce04db0e85ab23b7
> If you reply to this message, keeping the Subject: header intact,
> Mailman will discard the held message. Do this if the message is
> spam. If you reply to this message and include an Approved: header
> with the list password in it, the message will be approved for posting
> to the list. The Approved: header can also appear in the first line
> of the body of the reply.
>
More information about the usocket-devel
mailing list