|
From: <fe...@us...> - 2012-05-12 07:06:13
|
Revision: 141
http://ehs.svn.sourceforge.net/ehs/?rev=141&view=rev
Author: felfert
Date: 2012-05-12 07:06:07 +0000 (Sat, 12 May 2012)
Log Message:
-----------
- Mark connection for closing on error during sending a response.
Modified Paths:
--------------
trunk/ehs.cpp
Modified: trunk/ehs.cpp
===================================================================
--- trunk/ehs.cpp 2012-04-25 21:52:50 UTC (rev 140)
+++ trunk/ehs.cpp 2012-05-12 07:06:07 UTC (rev 141)
@@ -882,6 +882,7 @@
void EHSConnection::SendResponse(GenericResponse *gresp)
{
MutexHelper mutex(&m_oMutex);
+ int r = 0;
HttpResponse *response = dynamic_cast<HttpResponse *>(gresp);
if (NULL == response) {
@@ -893,8 +894,9 @@
mutex.Unlock();
if (0 < len) {
EHS_TRACE("Sending GENERIC response", "");
- m_poNetworkAbstraction->Send(
+ r = m_poNetworkAbstraction->Send(
reinterpret_cast<const void *>(gresp->GetBody().data()), gresp->GetBody().length());
+ EHS_TRACE("Sent GENERIC response r=%d", r);
} else {
// Special case: "sending" a zero-sized body triggers a close.
DoneReading(false);
@@ -930,28 +932,33 @@
// extra line break signalling end of headers
oss << "\r\n";
mutex.Unlock();
- m_poNetworkAbstraction->Send(
+ r = m_poNetworkAbstraction->Send(
reinterpret_cast<const void *>(oss.str().c_str()), oss.str().length());
- // Switch protocols if necessary
- if (HTTPRESPONSECODE_101_SWITCHING_PROTOCOLS == response->GetResponseCode()) {
- EHS_TRACE("Switching connection to RAW mode", "");
- m_bRawMode = true;
- RawSocketHandler *rsh = m_poEHSServer->m_poTopLevelEHS->GetRawSocketHandler();
- if (rsh) {
- rsh->OnConnect(this);
+ if (-1 != r) {
+ // Switch protocols if necessary
+ if (HTTPRESPONSECODE_101_SWITCHING_PROTOCOLS == response->GetResponseCode()) {
+ EHS_TRACE("Switching connection to RAW mode", "");
+ m_bRawMode = true;
+ RawSocketHandler *rsh = m_poEHSServer->m_poTopLevelEHS->GetRawSocketHandler();
+ if (rsh) {
+ rsh->OnConnect(this);
+ }
+ return;
}
- return;
- }
- // now send the body
- int blen = atoi(response->GetHeaders()["content-length"].c_str());
- if (blen > 0) {
- EHS_TRACE("Sending %d bytes in thread %08x", blen, pthread_self());
- m_poNetworkAbstraction->Send(response->GetBody().data(), blen);
- EHS_TRACE("Done sending %d bytes in thread %08x", blen, pthread_self());
+ // now send the body
+ int blen = atoi(response->GetHeaders()["content-length"].c_str());
+ if (blen > 0) {
+ EHS_TRACE("Sending %d bytes in thread %08x", blen, pthread_self());
+ int r = m_poNetworkAbstraction->Send(response->GetBody().data(), blen);
+ EHS_TRACE("Done sending %d bytes in thread %08x r=%d", blen, pthread_self(), r);
+ }
}
}
+ if (-1 == r) {
+ DoneReading(false);
+ }
}
void EHSServer::EndServerThread()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|