SMTP in multi mode: use Curl_ssl_connect_nonblocking() when connecting.

This commit is contained in:
Ben Noordhuis 2011-02-16 22:13:10 +01:00 committed by Daniel Stenberg
parent 14e8b13a45
commit 88e825de86
2 changed files with 11 additions and 3 deletions

View File

@ -999,7 +999,14 @@ static CURLcode smtp_multi_statemach(struct connectdata *conn,
bool *done)
{
struct smtp_conn *smtpc = &conn->proto.smtpc;
CURLcode result = Curl_pp_multi_statemach(&smtpc->pp);
CURLcode result;
if((conn->handler->protocol & CURLPROTO_SMTPS) && !smtpc->ssldone) {
result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &smtpc->ssldone);
}
else {
result = Curl_pp_multi_statemach(&smtpc->pp);
}
*done = (bool)(smtpc->state == SMTP_STOP);
@ -1114,8 +1121,8 @@ static CURLcode smtp_connect(struct connectdata *conn,
}
#endif /* !CURL_DISABLE_HTTP && !CURL_DISABLE_PROXY */
if(conn->handler->protocol & CURLPROTO_SMTPS) {
/* BLOCKING */
if((conn->handler->protocol & CURLPROTO_SMTPS) &&
data->state.used_interface != Curl_if_multi) {
/* SMTPS is simply smtp with SSL for the control channel */
/* now, perform the SSL initialization for this socket */
result = Curl_ssl_connect(conn, FIRSTSOCKET);

View File

@ -57,6 +57,7 @@ struct smtp_conn {
unsigned int authmechs; /* Accepted authentication methods. */
smtpstate state; /* always use smtp.c:state() to change state! */
struct curl_slist *rcpt;
bool ssldone; /* is connect() over SSL done? only relevant in multi mode */
};
/* Authentication mechanism flags. */