405 SSL *ssl = SSL_new(ls->ssl->sslctx); |
405 SSL *ssl = SSL_new(ls->ssl->sslctx); |
406 SSL_set_fd(ssl, clientfd); |
406 SSL_set_fd(ssl, clientfd); |
407 int ssl_ar = SSL_accept(ssl); |
407 int ssl_ar = SSL_accept(ssl); |
408 if(ssl_ar <= 0) { |
408 if(ssl_ar <= 0) { |
409 int error = SSL_get_error(ssl, ssl_ar); |
409 int error = SSL_get_error(ssl, ssl_ar); |
410 log_ereport(LOG_INFORM, "SSL accept error: %d", error); |
410 char *errstr; |
|
411 switch(error) { |
|
412 default: errstr = "unknown"; break; |
|
413 case SSL_ERROR_ZERO_RETURN: errstr = "SSL_ERROR_ZERO_RETURN"; break; |
|
414 case SSL_ERROR_WANT_READ: errstr = "SSL_ERROR_WANT_READ"; break; |
|
415 case SSL_ERROR_WANT_WRITE: errstr = "SSL_ERROR_WANT_WRITE"; break; |
|
416 case SSL_ERROR_WANT_CONNECT: errstr = "SSL_ERROR_WANT_CONNECT"; break; |
|
417 case SSL_ERROR_WANT_ACCEPT: errstr = "SSL_ERROR_WANT_ACCEPT"; break; |
|
418 case SSL_ERROR_WANT_X509_LOOKUP: errstr = "SSL_ERROR_WANT_X509_LOOKUP"; break; |
|
419 case SSL_ERROR_SYSCALL: errstr = "SSL_ERROR_SYSCALL"; break; |
|
420 case SSL_ERROR_SSL: errstr = "SL_ERROR_SSL"; break; |
|
421 } |
|
422 log_ereport(LOG_VERBOSE, "SSL accept error[%d]: %s", error, errstr); |
411 free(conn); |
423 free(conn); |
412 conn = NULL; |
424 conn = NULL; |
413 close(clientfd); |
425 close(clientfd); |
414 } else { |
426 } else { |
415 conn->ssl = ssl; |
427 conn->ssl = ssl; |