diff options
| author | zousar <[email protected]> | 2022-02-01 21:40:07 -0700 |
|---|---|---|
| committer | zousar <[email protected]> | 2022-02-01 21:40:07 -0700 |
| commit | 8babb0158f10ecd5e225919efb0b8926d77a981e (patch) | |
| tree | 3fadbb05f319de8aacebd88be89cc59bcbb21b2a /zenhttp/httpasio.cpp | |
| parent | Merge branch 'main' into non-elevated-asio (diff) | |
| download | zen-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.cpp | 13 |
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(); |