mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
Somewhat ugly fix to deal with non-blocking sockets. We just loop and try
again. THIS IS NOT A NICE FIX.
This commit is contained in:
parent
b6dba9f5dd
commit
cba9838e8f
28
lib/http.c
28
lib/http.c
@ -128,8 +128,10 @@ static
|
|||||||
CURLcode add_buffer_send(int sockfd, struct connectdata *conn, send_buffer *in,
|
CURLcode add_buffer_send(int sockfd, struct connectdata *conn, send_buffer *in,
|
||||||
long *bytes_written)
|
long *bytes_written)
|
||||||
{
|
{
|
||||||
size_t amount;
|
ssize_t amount;
|
||||||
CURLcode result;
|
CURLcode res;
|
||||||
|
char *ptr;
|
||||||
|
int size;
|
||||||
|
|
||||||
if(conn->data->set.verbose) {
|
if(conn->data->set.verbose) {
|
||||||
fputs("> ", conn->data->set.err);
|
fputs("> ", conn->data->set.err);
|
||||||
@ -137,7 +139,25 @@ CURLcode add_buffer_send(int sockfd, struct connectdata *conn, send_buffer *in,
|
|||||||
fwrite(in->buffer, in->size_used, 1, conn->data->set.err);
|
fwrite(in->buffer, in->size_used, 1, conn->data->set.err);
|
||||||
}
|
}
|
||||||
|
|
||||||
result = Curl_write(conn, sockfd, in->buffer, in->size_used, &amount);
|
/* The looping below is required since we use non-blocking sockets, but due
|
||||||
|
to the circumstances we will just loop and try again and again etc */
|
||||||
|
|
||||||
|
ptr = in->buffer;
|
||||||
|
size = in->size_used;
|
||||||
|
do {
|
||||||
|
res = Curl_write(conn, sockfd, ptr, size, &amount);
|
||||||
|
|
||||||
|
if(CURLE_OK != res)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if(amount != size) {
|
||||||
|
size += amount;
|
||||||
|
ptr += amount;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
} while(1);
|
||||||
|
|
||||||
if(in->buffer)
|
if(in->buffer)
|
||||||
free(in->buffer);
|
free(in->buffer);
|
||||||
@ -145,7 +165,7 @@ CURLcode add_buffer_send(int sockfd, struct connectdata *conn, send_buffer *in,
|
|||||||
|
|
||||||
*bytes_written = amount;
|
*bytes_written = amount;
|
||||||
|
|
||||||
return result;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user