Commit 9a509680 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

gopher: properly return error for poll failures

parent 8a6e89a9
Loading
Loading
Loading
Loading
+14 −13
Original line number Diff line number Diff line
@@ -121,20 +121,17 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
    result = Curl_write(conn, sockfd, sel, k, &amount);
    if(!result) { /* Which may not have written it all! */
      result = Curl_client_write(conn, CLIENTWRITE_HEADER, sel, amount);
      if(result) {
        free(sel_org);
        return result;
      }
      if(result)
        break;

      k -= amount;
      sel += amount;
      if(k < 1)
        break; /* but it did write it all */
    }
    else {
      failf(data, "Failed sending Gopher request");
      free(sel_org);
      return result;
    }
    else
      break;

    /* Don't busyloop. The entire loop thing is a work-around as it causes a
       BLOCKING behavior which is a NO-NO. This function should rather be
       split up in a do and a doing piece where the pieces that aren't
@@ -144,11 +141,15 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
       Wait a while for the socket to be writable. Note that this doesn't
       acknowledge the timeout.
    */
    SOCKET_WRITABLE(sockfd, 100);
    if(SOCKET_WRITABLE(sockfd, 100) < 0) {
      result = CURLE_SEND_ERROR;
      break;
    }
  }

  free(sel_org);

  if(!result)
    /* We can use Curl_sendf to send the terminal \r\n relatively safely and
       save allocing another string/doing another _write loop. */
    result = Curl_sendf(sockfd, conn, "\r\n");