Index: tls_read.3 =================================================================== RCS file: /cvs/src/lib/libtls/man/tls_read.3,v diff -u -p -r1.7 tls_read.3 --- tls_read.3 9 Jul 2019 17:58:33 -0000 1.7 +++ tls_read.3 8 May 2024 00:26:10 -0000 @@ -92,12 +92,15 @@ After closing the connection, .Fa ctx can be passed to .Xr tls_free 3 . +.Fn tls_close +is safe to call if the underlying socket is no longer connected. .\" XXX Fn tls_reset does what? .Sh RETURN VALUES .Fn tls_read and .Fn tls_write -return a size on success or -1 on error. +return -1 on error, 0 if the underlying socket is disconnected, or +a size on success. .Pp .Fn tls_handshake and @@ -165,6 +168,8 @@ while (len > 0) { continue; if (ret == -1) errx(1, "tls_write: %s", tls_error(ctx)); + if (ret == 0) + errx(1, "tls_write: socket disconnected"); buf += ret; len -= ret; } @@ -179,7 +184,7 @@ non-blocking file descriptor using pfd[0].fd = fd; pfd[0].events = POLLIN|POLLOUT; while (len > 0) { - nready = poll(pfd, 1, 0); + nready = poll(pfd, 1, INFTIM); if (nready == -1) err(1, "poll"); if ((pfd[0].revents & (POLLERR|POLLNVAL))) @@ -194,6 +199,8 @@ while (len > 0) { pfd[0].events = POLLOUT; else if (ret == -1) errx(1, "tls_write: %s", tls_error(ctx)); + else if (ret == 0) + errx(1, "tls_write: socket disconnected"); else { buf += ret; len -= ret;