Revision 2139

branches/lighttpd-1.4.x/src/connections.c (revision 2139)
1669 1669
			}
1670 1670
#ifdef USE_OPENSSL
1671 1671
			if (srv_sock->is_ssl) {
1672
				int ret;
1672
				int ret, ssl_r;
1673
				unsigned long err;
1673 1674
				ERR_clear_error();
1674 1675
				switch ((ret = SSL_shutdown(con->ssl))) {
1675 1676
				case 1:
......
1677 1678
					break;
1678 1679
				case 0:
1679 1680
					ERR_clear_error();
1680
					if ((ret = SSL_shutdown(con->ssl)) == 1) break;
1681
					if (-1 != (ret = SSL_shutdown(con->ssl))) break;
1681 1682

  
1682 1683
					// fall through
1683 1684
				default:
1684
					log_error_write(srv, __FILE__, __LINE__, "sds", "SSL:",
1685
							SSL_get_error(con->ssl, ret),
1686
							ERR_error_string(ERR_get_error(), NULL));
1687
					return -1;
1685

  
1686
					switch ((ssl_r = SSL_get_error(con->ssl, ret))) {
1687
					case SSL_ERROR_WANT_WRITE:
1688
					case SSL_ERROR_WANT_READ:
1689
						break;
1690
					case SSL_ERROR_SYSCALL:
1691
						/* perhaps we have error waiting in our error-queue */
1692
						if (0 != (err = ERR_get_error())) {
1693
							do {
1694
								log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:",
1695
										ssl_r, ret,
1696
										ERR_error_string(err, NULL));
1697
							} while((err = ERR_get_error()));
1698
						} else {
1699
							log_error_write(srv, __FILE__, __LINE__, "sddds", "SSL (error):",
1700
									ssl_r, r, errno,
1701
									strerror(errno));
1702
						}
1703
	
1704
						break;
1705
					default:
1706
						while((err = ERR_get_error())) {
1707
							log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:",
1708
									ssl_r, ret,
1709
									ERR_error_string(err, NULL));
1710
						}
1711
	
1712
						break;
1713
					}
1688 1714
				}
1689 1715
			}
1716
			ERR_clear_error();
1690 1717
#endif
1691 1718

  
1692 1719
			switch(con->mode) {
1693 1720

  

Also available in: Unified diff