select() times out if there's no IO ready in the socket which sometimes might happen due to OpenSSL buffering. Use SSL_pending(3) to make sure SSL_read(3) sucks in last buffered bytes. --- common.c.orig 2013-01-13 17:12:06.434631196 +0100 +++ common.c 2013-01-13 17:12:36.185921621 +0100 @@ -529,6 +529,10 @@ fetch_read(conn_t *conn, char *buf, size fetch_syserr(); return (-1); } +#ifdef WITH_SSL + if (conn->ssl && SSL_pending(conn->ssl)) + break; +#endif errno = 0; r = select(conn->sd + 1, &readfds, NULL, NULL, &waittv); if (r == -1) {