aboutsummaryrefslogtreecommitdiff
path: root/zenhttp/httpasio.cpp
diff options
context:
space:
mode:
authorzousar <[email protected]>2022-02-01 21:40:07 -0700
committerzousar <[email protected]>2022-02-01 21:40:07 -0700
commit8babb0158f10ecd5e225919efb0b8926d77a981e (patch)
tree3fadbb05f319de8aacebd88be89cc59bcbb21b2a /zenhttp/httpasio.cpp
parentMerge branch 'main' into non-elevated-asio (diff)
downloadzen-8babb0158f10ecd5e225919efb0b8926d77a981e.tar.xz
zen-8babb0158f10ecd5e225919efb0b8926d77a981e.zip
Use SIO_LOOPBACK_FAST_PATH on Windows and increase buffer sizes
Diffstat (limited to 'zenhttp/httpasio.cpp')
-rw-r--r--zenhttp/httpasio.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/zenhttp/httpasio.cpp b/zenhttp/httpasio.cpp
index f2d48200e..ae96c7637 100644
--- a/zenhttp/httpasio.cpp
+++ b/zenhttp/httpasio.cpp
@@ -12,6 +12,7 @@
ZEN_THIRD_PARTY_INCLUDES_START
#if ZEN_PLATFORM_WINDOWS
# include <conio.h>
+# include <mstcpip.h>
#endif
#include <http_parser.h>
#include <asio.hpp>
@@ -934,12 +935,22 @@ struct HttpAcceptor
m_Acceptor.set_option(asio::ip::v6_only(false));
m_Acceptor.set_option(asio::socket_base::reuse_address(true));
m_Acceptor.set_option(asio::ip::tcp::no_delay(true));
+ m_Acceptor.set_option(asio::socket_base::receive_buffer_size(128 * 1024));
+ m_Acceptor.set_option(asio::socket_base::send_buffer_size(256 * 1024));
+
asio::error_code BindErrorCode;
m_Acceptor.bind(asio::ip::tcp::endpoint(asio::ip::address_v6::any(), Port), BindErrorCode);
if (BindErrorCode == asio::error::access_denied)
{
m_Acceptor.bind(asio::ip::tcp::endpoint(asio::ip::address_v6::any(), 0));
}
+
+#if ZEN_PLATFORM_WINDOWS
+ SOCKET NativeSocket = m_Acceptor.native_handle();
+ int LoopbackOptionValue = 1;
+ DWORD OptionNumberOfBytesReturned = 0;
+ WSAIoctl(NativeSocket, SIO_LOOPBACK_FAST_PATH, &LoopbackOptionValue, sizeof(LoopbackOptionValue), NULL, 0, &OptionNumberOfBytesReturned, 0, 0);
+#endif
m_Acceptor.listen();
}
@@ -969,6 +980,8 @@ struct HttpAcceptor
// reference to the callbacks.
Socket->set_option(asio::ip::tcp::no_delay(true));
+ Socket->set_option(asio::socket_base::receive_buffer_size(128*1024));
+ Socket->set_option(asio::socket_base::send_buffer_size(256*1024));
auto Conn = std::make_shared<HttpServerConnection>(m_Server, std::move(Socket));
Conn->HandleNewRequest();