guile: Loop or poll upon GNUTLS_E_AGAIN and GNUTLS_E_INTERRUPTED.
authorLudovic Courtès <ludo@gnu.org>
Wed, 12 Jun 2019 09:32:19 +0000 (11:32 +0200)
committerLudovic Courtès <ludo@gnu.org>
Wed, 12 Jun 2019 20:27:00 +0000 (22:27 +0200)
commita229bb36c9592b151f6feb277238c41ab39f40a9
treed1bf6fef4baee13a3f512c091cdcec506a93e321
parentd762aa6b6d90c473366fc45ae08518a56af69b93
guile: Loop or poll upon GNUTLS_E_AGAIN and GNUTLS_E_INTERRUPTED.

* guile/src/core.c (do_fill_port) [USING_GUILE_BEFORE_2_2]: Loop while
'gnutls_record_recv' returns GNUTLS_E_AGAIN or GNUTLS_E_INTERRUPTED.
(read_from_session_record_port) [!USING_GUILE_BEFORE_2_2]: Likewise, and
return -1 if SCM_GNUTLS_SESSION_TRANSPORT_IS_FD and we got GNUTLS_E_AGAIN.
(session_record_port_fd) [!USING_GUILE_BEFORE_2_2]: New function.
(scm_init_gnutls_session_record_port_type) [!USING_GUILE_BEFORE_2_2]:
Call 'scm_set_port_read_wait_fd'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
guile/src/core.c