diff -urN sylpheed-claws-1.0.4/src/common/socket.c sylpheed-claws-1.0.4.ab04/src/common/socket.c --- sylpheed-claws-1.0.4/src/common/socket.c 2004-10-20 18:18:23.000000000 +0000 +++ sylpheed-claws-1.0.4.ab04/src/common/socket.c 2005-04-25 06:24:39.000000000 +0000 @@ -387,7 +387,7 @@ { gint ret; void (*prev_handler)(gint); - + alarm(0); prev_handler = signal(SIGALRM, timeout_handler); if (sigsetjmp(jmpenv, 1)) { @@ -410,7 +410,7 @@ { struct hostent *hp; void (*prev_handler)(gint); - + alarm(0); prev_handler = signal(SIGALRM, timeout_handler); if (sigsetjmp(jmpenv, 1)) { @@ -851,7 +851,7 @@ SockLookupData *lookup_data = NULL; gint pipe_fds[2]; pid_t pid; - + if (pipe(pipe_fds) < 0) { perror("pipe"); func(NULL, data); @@ -1020,7 +1020,7 @@ #if USE_OPENSSL gint ssl_read(SSL *ssl, gchar *buf, gint len) { - gint ret; + gint err, ret; if (SSL_pending(ssl) == 0) { if (fd_check_io(SSL_get_rfd(ssl), G_IO_IN) < 0) @@ -1029,14 +1029,19 @@ ret = SSL_read(ssl, buf, len); - switch (SSL_get_error(ssl, ret)) { + switch ((err = SSL_get_error(ssl, ret))) { case SSL_ERROR_NONE: return ret; case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_WRITE: errno = EAGAIN; return -1; + case SSL_ERROR_ZERO_RETURN: + return 0; default: + g_warning("SSL_read() returned error %d, ret = %d\n", err, ret); + if (ret == 0) + return 0; return -1; } } @@ -1315,7 +1320,7 @@ #if USE_OPENSSL gint ssl_peek(SSL *ssl, gchar *buf, gint len) { - gint ret; + gint err, ret; if (SSL_pending(ssl) == 0) { if (fd_check_io(SSL_get_rfd(ssl), G_IO_IN) < 0) @@ -1324,14 +1329,19 @@ ret = SSL_peek(ssl, buf, len); - switch (SSL_get_error(ssl, ret)) { + switch ((err = SSL_get_error(ssl, ret))) { case SSL_ERROR_NONE: return ret; case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_WRITE: errno = EAGAIN; return -1; + case SSL_ERROR_ZERO_RETURN: + return 0; default: + g_warning("SSL_peek() returned error %d, ret = %d\n", err, ret); + if (ret == 0) + return 0; return -1; } } diff -urN sylpheed-claws-1.0.4/src/send_message.c sylpheed-claws-1.0.4.ab04/src/send_message.c --- sylpheed-claws-1.0.4/src/send_message.c 2004-06-08 10:55:38.000000000 +0000 +++ sylpheed-claws-1.0.4.ab04/src/send_message.c 2005-04-25 05:15:06.000000000 +0000 @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2003 Hiroyuki Yamamoto + * Copyright (C) 1999-2005 Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -412,6 +412,11 @@ ac_prefs->tmp_smtp_pass = NULL; } ret = -1; + } else if (session->state == SESSION_EOF && + SMTP_SESSION(session)->state == SMTP_QUIT) { + /* consider EOF right after QUIT successful */ + log_warning("%s\n", _("Connection closed by the remote host.")); + ret = 0; } else if (session->state == SESSION_ERROR || session->state == SESSION_EOF || session->state == SESSION_TIMEOUT ||