mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
gopher: properly return error for poll failures
This commit is contained in:
parent
8a6e89a9eb
commit
9a509680f6
21
lib/gopher.c
21
lib/gopher.c
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user