summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-03-19 14:13:31 +0100
committerLudovic Courtès <ludo@gnu.org>2021-03-19 14:13:31 +0100
commitc92f2c7df0532b9f44dea59e68e1079e9504371b (patch)
tree35415c6ceb6765f41b12ad6daf8d6981986f5eb5
parente4f54d4b32b0dc4233ed16e24db5cc913fccf088 (diff)
downloadguile-c92f2c7df0532b9f44dea59e68e1079e9504371b.tar.gz
web: 'tls-wrap' returns an unbuffered custom port.
This mirrors Guix commit b168acae2a01fd84075cc134a6140594a978fde5. * module/web/client.scm (tls-wrap)[unbuffered]: New procedure. Pass the result of 'make-custom-binary-input/output-port' to 'unbuffered'.
-rw-r--r--module/web/client.scm13
1 files changed, 10 insertions, 3 deletions
diff --git a/module/web/client.scm b/module/web/client.scm
index 76d9cc45a..3bd22f81b 100644
--- a/module/web/client.scm
+++ b/module/web/client.scm
@@ -274,17 +274,24 @@ host name without trailing dot."
(unless (port-closed? record)
(close-port record)))
+ (define (unbuffered port)
+ (setvbuf port 'none)
+ port)
+
(setvbuf record 'block)
;; Return a port that wraps RECORD to ensure that closing it also
;; closes PORT, the actual socket port, and its file descriptor.
+ ;; Make sure it does not introduce extra buffering (custom ports
+ ;; are buffered by default).
;; XXX: This wrapper would be unnecessary if GnuTLS could
;; automatically close SESSION's file descriptor when RECORD is
;; closed, but that doesn't seem to be possible currently (as of
;; 3.6.9).
- (make-custom-binary-input/output-port "gnutls wrapped port" read! write!
- get-position set-position!
- close))))
+ (unbuffered
+ (make-custom-binary-input/output-port "gnutls wrapped port" read! write!
+ get-position set-position!
+ close)))))
(define (ensure-uri-reference uri-or-string)
(cond