HttpRequest: write whole request to socket

Better performance by using a single write, and some servers may not be
happy about getting so many TCP fragments for the HTTP header.

Change-Id: If7139e2a7748ea423d470676e70bd523a89031b2
Reviewed-on: https://review.haiku-os.org/c/909
Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
Adrien Destugues
2019-01-27 07:55:55 +00:00
committed by waddlesplash
parent 27aefde9fd
commit 1322d50732
2 changed files with 15 additions and 11 deletions
+2 -2
View File
@@ -68,8 +68,8 @@ private:
status_t _ProtocolLoop();
status_t _MakeRequest();
void _SendRequest();
void _SendHeaders();
BString _SerializeRequest();
BString _SerializeHeaders();
void _SendPostData();
void _ParseStatus();
+13 -9
View File
@@ -551,9 +551,11 @@ BHttpRequest::_MakeRequest()
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT,
"Connection opened, sending request.");
_SendRequest();
_SendHeaders();
fSocket->Write("\r\n", 2);
BString requestHeaders;
requestHeaders.Append(_SerializeRequest());
requestHeaders.Append(_SerializeHeaders());
requestHeaders.Append("\r\n");
fSocket->Write(requestHeaders.String(), requestHeaders.Length());
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Request sent.");
_SendPostData();
@@ -835,8 +837,8 @@ BHttpRequest::_ParseHeaders()
}
void
BHttpRequest::_SendRequest()
BString
BHttpRequest::_SerializeRequest()
{
BString request(fRequestMethod);
request << ' ';
@@ -868,12 +870,14 @@ BHttpRequest::_SendRequest()
break;
}
fSocket->Write(request.String(), request.Length());
_EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_OUT, "%s", request.String());
return request;
}
void
BHttpRequest::_SendHeaders()
BString
BHttpRequest::_SerializeHeaders()
{
BHttpHeaders outputHeaders;
@@ -996,7 +1000,7 @@ BHttpRequest::_SendHeaders()
_EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_OUT, "%s", header);
}
fSocket->Write(headerData.String(), headerData.Length());
return headerData;
}