Author: iratqq
Date: Mon Feb 16 09:23:03 2009
New Revision: 5855
Modified:
trunk/scm/http-client.scm
Log:
* scm/http-client.scm (http:open):
- Plug file handler leak.
(http:get):
- Sync.
Modified: trunk/scm/http-client.scm
==============================================================================
--- trunk/scm/http-client.scm (original)
+++ trunk/scm/http-client.scm Mon Feb 16 09:23:03 2009
@@ -34,28 +34,29 @@
(require "input-parse.scm")
(define (http:open hostname servname)
- (filter integer?
- (call-with-getaddrinfo-hints
- '($AI_PASSIVE) '$PF_UNSPEC '$SOCK_STREAM #f
- (lambda (hints)
- (call-with-getaddrinfo
- hostname servname hints
- (lambda (res)
- (map (lambda (res0)
- (let ((s (socket (addrinfo-ai-family? res0)
- (addrinfo-ai-socktype? res0)
- (addrinfo-ai-protocol? res0))))
- (if (< s 0)
- #f
- (if (< (connect s
- (addrinfo-ai-addr? res0)
- (addrinfo-ai-addrlen? res0))
- 0)
- (begin
- (file-close s)
- #f)
- s))))
- res)))))))
+ (call/cc
+ (lambda (fd)
+ (call-with-getaddrinfo-hints
+ '($AI_PASSIVE) '$PF_UNSPEC '$SOCK_STREAM #f
+ (lambda (hints)
+ (call-with-getaddrinfo
+ hostname servname hints
+ (lambda (res)
+ (map (lambda (res0)
+ (let ((s (socket (addrinfo-ai-family? res0)
+ (addrinfo-ai-socktype? res0)
+ (addrinfo-ai-protocol? res0))))
+ (if (< s 0)
+ #f
+ (if (< (connect s
+ (addrinfo-ai-addr? res0)
+ (addrinfo-ai-addrlen? res0))
+ 0)
+ (begin
+ (file-close s)
+ #f)
+ (fd s)))))
+ res))))))))
(define (http:encode-uri-string str)
(define
hex '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F"))
@@ -200,10 +201,10 @@
(let ((file (if proxy
(http:open (hostname? proxy) (port? proxy))
(http:open hostname servname))))
- (if (null? file)
+ (if (not file)
(uim-notify-fatal "cannot connect server"))
(call-with-open-file-port
- (car file)
+ file
(lambda (port)
(and-let* ((request (http:make-get-request-string hostname path
servname proxy request-alist))
(nr (file-display request port))