diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2006-09-28 05:46:11 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2006-09-28 05:46:11 +0000 |
commit | 6e9d44b63f4144c0f4793224f980af45a8a0d8c5 (patch) | |
tree | 6454c0d43bde5f47b28fd63b707004260615886d /libsylph/ssl.c | |
parent | c044d6e3c39e28d98ea4d815df84835e366aa442 (diff) |
fixed ssl_init_socket_with_method().
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@1200 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'libsylph/ssl.c')
-rw-r--r-- | libsylph/ssl.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libsylph/ssl.c b/libsylph/ssl.c index 4507862f..d2721276 100644 --- a/libsylph/ssl.c +++ b/libsylph/ssl.c @@ -93,7 +93,7 @@ gboolean ssl_init_socket(SockInfo *sockinfo) gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSLMethod method) { X509 *server_cert; - gint ret; + gint err, ret; switch (method) { case SSL_METHOD_SSLv23: @@ -122,9 +122,15 @@ gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSLMethod method) } SSL_set_fd(sockinfo->ssl, sockinfo->sock); - if ((ret = SSL_connect(sockinfo->ssl)) == -1) { - g_warning(_("SSL connect failed (%s)\n"), - ERR_error_string(ERR_get_error(), NULL)); + while ((ret = SSL_connect(sockinfo->ssl)) != 1) { + err = SSL_get_error(sockinfo->ssl, ret); + if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) { + g_usleep(100000); + g_warning("SSL_connect(): try again\n"); + continue; + } + g_warning("SSL_connect() failed with error %d, ret = %d (%s)\n", + err, ret, ERR_error_string(ERR_get_error(), NULL)); return FALSE; } |