-exception-if-regular-file fd)
  (letrec ((id (a-sync-glib-write-watch resume
					(port-&gt;fdes port)
					(lambda (ioc status)
					  (catch #t
					    (lambda ()
					      (set! index (+ index (c-write fd
									    bv
									    index
									    (- length index))))
					      (if (&lt; index length)
						  'more
						  #f))
					    (lambda args
					      (g-source-remove id)
					      (release-port-handle port)
					      (apply throw args)))))))
    (let next ((res (await)))
      (if (eq