mirror of
https://github.com/yhirose/cpp-httplib
synced 2024-11-21 14:29:10 -07:00
Fix KeepAliveTest.SSLClientReconnectionPost problem (#1921)
This commit is contained in:
parent
80fb03628b
commit
978a4f6345
1 changed files with 3 additions and 41 deletions
44
httplib.h
44
httplib.h
|
@ -3189,43 +3189,6 @@ private:
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inline bool keep_alive(socket_t sock, time_t keep_alive_timeout_sec) {
|
|
||||||
const auto timeout = keep_alive_timeout_sec * 1000;
|
|
||||||
|
|
||||||
#ifdef CPPHTTPLIB_USE_STEADY_TIMER_FOR_KEEP_ALIVE
|
|
||||||
const auto start = std::chrono::steady_clock::now();
|
|
||||||
#else
|
|
||||||
time_t elapse = 0;
|
|
||||||
#endif
|
|
||||||
while (true) {
|
|
||||||
auto val = select_read(sock, 0, 10000);
|
|
||||||
|
|
||||||
#ifndef CPPHTTPLIB_USE_STEADY_TIMER_FOR_KEEP_ALIVE
|
|
||||||
elapse += 12; // heuristic...
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (val < 0) {
|
|
||||||
return false;
|
|
||||||
} else if (val == 0) {
|
|
||||||
#ifdef CPPHTTPLIB_USE_STEADY_TIMER_FOR_KEEP_ALIVE
|
|
||||||
auto current = std::chrono::steady_clock::now();
|
|
||||||
auto duration = duration_cast<milliseconds>(current - start);
|
|
||||||
if (duration.count() > timeout) { return false; }
|
|
||||||
#else
|
|
||||||
if (elapse > timeout) { return false; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds{10});
|
|
||||||
|
|
||||||
#ifndef CPPHTTPLIB_USE_STEADY_TIMER_FOR_KEEP_ALIVE
|
|
||||||
elapse += 12; // heuristic...
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline bool
|
inline bool
|
||||||
process_server_socket_core(const std::atomic<socket_t> &svr_sock, socket_t sock,
|
process_server_socket_core(const std::atomic<socket_t> &svr_sock, socket_t sock,
|
||||||
|
@ -3235,7 +3198,7 @@ process_server_socket_core(const std::atomic<socket_t> &svr_sock, socket_t sock,
|
||||||
auto ret = false;
|
auto ret = false;
|
||||||
auto count = keep_alive_max_count;
|
auto count = keep_alive_max_count;
|
||||||
while (svr_sock != INVALID_SOCKET && count > 0 &&
|
while (svr_sock != INVALID_SOCKET && count > 0 &&
|
||||||
keep_alive(sock, keep_alive_timeout_sec)) {
|
select_read(sock, keep_alive_timeout_sec, 0) > 0) {
|
||||||
auto close_connection = count == 1;
|
auto close_connection = count == 1;
|
||||||
auto connection_closed = false;
|
auto connection_closed = false;
|
||||||
ret = callback(close_connection, connection_closed);
|
ret = callback(close_connection, connection_closed);
|
||||||
|
@ -4103,13 +4066,12 @@ inline bool read_headers(Stream &strm, Headers &headers) {
|
||||||
if (line_reader.end_with_crlf()) {
|
if (line_reader.end_with_crlf()) {
|
||||||
// Blank line indicates end of headers.
|
// Blank line indicates end of headers.
|
||||||
if (line_reader.size() == 2) { break; }
|
if (line_reader.size() == 2) { break; }
|
||||||
#ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR
|
|
||||||
} else {
|
} else {
|
||||||
|
#ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR
|
||||||
// Blank line indicates end of headers.
|
// Blank line indicates end of headers.
|
||||||
if (line_reader.size() == 1) { break; }
|
if (line_reader.size() == 1) { break; }
|
||||||
line_terminator_len = 1;
|
line_terminator_len = 1;
|
||||||
#else
|
#else
|
||||||
} else {
|
|
||||||
continue; // Skip invalid line.
|
continue; // Skip invalid line.
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -8730,7 +8692,7 @@ inline void ssl_delete(std::mutex &ctx_mutex, SSL *ssl, socket_t sock,
|
||||||
|
|
||||||
auto ret = SSL_shutdown(ssl);
|
auto ret = SSL_shutdown(ssl);
|
||||||
while (ret == 0) {
|
while (ret == 0) {
|
||||||
std::this_thread::sleep_for(std::chrono::microseconds{10});
|
std::this_thread::sleep_for(std::chrono::milliseconds{100});
|
||||||
ret = SSL_shutdown(ssl);
|
ret = SSL_shutdown(ssl);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue