char buffer[64 * 1024];
if (m_CurrentAction == TlsActionNone) {
- if (revents & (POLLIN | POLLERR | POLLHUP))
+ bool corked = IsCorked();
+ if (!corked && (revents & (POLLIN | POLLERR | POLLHUP)))
m_CurrentAction = TlsActionRead;
else if (m_SendQ->GetAvailableBytes() > 0 && (revents & POLLOUT))
m_CurrentAction = TlsActionWrite;
else {
- ChangeEvents(POLLIN);
+ if (corked)
+ ChangeEvents(0);
+ else
+ ChangeEvents(POLLIN);
+
return;
}
}
return m_RecvQ->GetAvailableBytes() > 0;
}
+void TlsStream::SetCorked(bool corked)
+{
+ Stream::SetCorked(corked);
+
+ boost::mutex::scoped_lock lock(m_Mutex);
+
+ if (corked)
+ m_CurrentAction = TlsActionNone;
+ else
+ ChangeEvents(POLLIN | POLLOUT);
+}
+
Socket::Ptr TlsStream::GetSocket() const
{
return m_Socket;
bool SupportsWaiting() const override;
bool IsDataAvailable() const override;
+ void SetCorked(bool corked) override;
+
bool IsVerifyOK() const;
String GetVerifyError() const;
bool HttpServerConnection::ProcessMessage()
{
-
bool res;
HttpResponse response(m_Stream, m_CurrentRequest);
return res;
}
+ m_Stream->SetCorked(true);
+
m_RequestQueue.Enqueue(std::bind(&HttpServerConnection::ProcessMessageAsync,
HttpServerConnection::Ptr(this), m_CurrentRequest, response, m_AuthenticatedUser));
response.Finish();
m_PendingRequests--;
+ m_Stream->SetCorked(false);
}
void HttpServerConnection::DataAvailableHandler()