diff options
| -rw-r--r-- | lib/smtp.c | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/smtp.c b/lib/smtp.c index 3ee068692..b0b4d1aaa 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -1035,6 +1035,7 @@ static CURLcode smtp_state_rcpt_resp(struct connectdata *conn,      /* send DATA */      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "DATA"); +      if(result)        return result; @@ -1392,9 +1393,6 @@ static CURLcode smtp_done(struct connectdata *conn, CURLcode status,      struct smtp_conn *smtpc = &conn->proto.smtpc;      struct pingpong *pp = &smtpc->pp; -    /* TODO: make this work even when the socket is EWOULDBLOCK in this -       call! */ -      /* Send the end of block data */      result = Curl_write(conn,                          conn->writesockfd,  /* socket to send to */ @@ -1402,7 +1400,19 @@ static CURLcode smtp_done(struct connectdata *conn, CURLcode status,                          SMTP_EOB_LEN,       /* buffer size */                          &bytes_written);    /* actually sent away */ -    pp->response = Curl_tvnow(); /* timeout relative now */ +    if(result) +      return result; + +    if(bytes_written != SMTP_EOB_LEN) { +      /* The whole chunk was not sent so keep it around and adjust the +         pingpong structure accordingly */ +      pp->sendthis = strdup(SMTP_EOB); +      pp->sendsize = SMTP_EOB_LEN; +      pp->sendleft = SMTP_EOB_LEN - bytes_written; +    } +    else +      /* Successfully sent so adjust the response timeout relative to now */ +      pp->response = Curl_tvnow();      state(conn, SMTP_POSTDATA);  | 
