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 _ProtocolLoop();
status_t _MakeRequest(); status_t _MakeRequest();
void _SendRequest(); BString _SerializeRequest();
void _SendHeaders(); BString _SerializeHeaders();
void _SendPostData(); void _SendPostData();
void _ParseStatus(); void _ParseStatus();
+13 -9
View File
@@ -551,9 +551,11 @@ BHttpRequest::_MakeRequest()
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, _EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT,
"Connection opened, sending request."); "Connection opened, sending request.");
_SendRequest(); BString requestHeaders;
_SendHeaders(); requestHeaders.Append(_SerializeRequest());
fSocket->Write("\r\n", 2); requestHeaders.Append(_SerializeHeaders());
requestHeaders.Append("\r\n");
fSocket->Write(requestHeaders.String(), requestHeaders.Length());
_EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Request sent."); _EmitDebug(B_URL_PROTOCOL_DEBUG_TEXT, "Request sent.");
_SendPostData(); _SendPostData();
@@ -835,8 +837,8 @@ BHttpRequest::_ParseHeaders()
} }
void BString
BHttpRequest::_SendRequest() BHttpRequest::_SerializeRequest()
{ {
BString request(fRequestMethod); BString request(fRequestMethod);
request << ' '; request << ' ';
@@ -868,12 +870,14 @@ BHttpRequest::_SendRequest()
break; break;
} }
fSocket->Write(request.String(), request.Length()); _EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_OUT, "%s", request.String());
return request;
} }
void BString
BHttpRequest::_SendHeaders() BHttpRequest::_SerializeHeaders()
{ {
BHttpHeaders outputHeaders; BHttpHeaders outputHeaders;
@@ -996,7 +1000,7 @@ BHttpRequest::_SendHeaders()
_EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_OUT, "%s", header); _EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_OUT, "%s", header);
} }
fSocket->Write(headerData.String(), headerData.Length()); return headerData;
} }