static int readable_gnutls(ne_socket *sock, int secs) { if (gnutls_record_check_pending(sock->ssl)) { return 0; } return readable_raw(sock, secs); }
/* OpenSSL I/O function implementations. */ static int readable_ossl(ne_socket *sock, int secs) { /* If there is buffered SSL data, then don't block on the socket. * FIXME: make sure that SSL_read *really* won't block if * SSL_pending returns non-zero. Possibly need to do * SSL_read(ssl, buf, SSL_pending(ssl)) */ if (sock->ssl && SSL_pending(sock->ssl)) return 0; return readable_raw(sock, secs); }
static ssize_t read_raw(ne_socket *sock, char *buffer, size_t len) { ssize_t ret; ret = readable_raw(sock, sock->rdtimeout); if (ret) return ret; do { ret = recv(sock->fd, buffer, len, 0); } while (ret == -1 && NE_ISINTR(ne_errno)); if (ret == 0) { set_error(sock, _("Connection closed")); ret = NE_SOCK_CLOSED; } else if (ret < 0) { int errnum = ne_errno; ret = NE_ISRESET(errnum) ? NE_SOCK_RESET : NE_SOCK_ERROR; set_strerror(sock, errnum); } return ret; }
/* OpenSSL I/O function implementations. */ static int readable_ossl(ne_socket *sock, int secs) { if (SSL_pending(sock->ssl)) return 0; return readable_raw(sock, secs); }