.Web: minor error-related fixes in sockets

git-svn-id: svn://ultimatepp.org/upp/trunk@3379 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
rylek 2011-04-27 16:06:51 +00:00
parent d4e208a2e2
commit 6be03cf62e
3 changed files with 11 additions and 8 deletions

View file

@ -294,7 +294,7 @@ bool HttpServer::DelayedWrite()
if((sw.done += count) >= sw.data.GetLength()) {
LogTime(NFormat("HttpServer::DelayedWrite(): finished %d (%d left)",
sw.socket.GetNumber(), delayed_writes.GetCount() - 1), 2);
sw.socket.Block(); // set to blocking mode before close
// sw.socket.Block(); // set to blocking mode before close
sw.socket.PeekWrite(1000);
sw.socket.StopWrite();
sw.socket.Close();
@ -304,7 +304,7 @@ bool HttpServer::DelayedWrite()
else if(msecs(sw.ticks) >= max_request_time) {
LogTime(NFormat("HttpServer::DelayedWrite(): timeout after sending %d out of %d bytes",
sw.done, sw.data.GetLength()), 0);
sw.socket.Block(); // set to blocking mode before close
// sw.socket.Block(); // set to blocking mode before close
sw.socket.StopWrite();
sw.socket.Close();
delayed_writes.Remove(i);

View file

@ -112,7 +112,7 @@ ERRINFO(WSASYSCALLFAILURE, "System call failure.")
Socket::Data::Data()
: socket(INVALID_SOCKET)
, is_blocking(true)
, is_error(false)
//, is_error(false)
, is_eof(false)
, fake_error(0)
{
@ -274,7 +274,7 @@ bool Socket::Data::CloseRaw(int msecs_timeout)
{
if(socket == INVALID_SOCKET)
return false;
bool ok = !is_error && Peek(msecs_timeout, true);
bool ok = !IsError() && Peek(msecs_timeout, true);
SOCKET old_socket = socket;
socket = INVALID_SOCKET;
if(old_socket != INVALID_SOCKET) {

View file

@ -46,7 +46,7 @@ public:
SOCKET socket;
String leftover;
bool is_blocking;
bool is_error;
// bool is_error;
bool is_eof;
#ifndef NOFAKEERROR
int fake_error;
@ -63,12 +63,15 @@ public:
friend void AttachSocket(Socket& socket, SOCKET hsocket, bool blocking);
};
Socket() { is_error = false; errorcode = 0; }
Socket(One<Data> data) : data(data) {}
Socket() { ClearError(); }
Socket(One<Data> data) : data(data) { ClearError(); if(data) data->sock = this; }
Socket(pick_ Socket& s) : data(s.data) { ClearError(); if(data) data->sock = this; }
Socket& operator = (pick_ Socket& s) { ClearError(); data = s.data; if(data) data->sock = this; return *this; }
static void Init();
void Attach(One<Data> d) { data = d; data->sock = this; }
void Attach(One<Data> d) { data = d; data->sock = this; ClearError(); }
void Clear() { if(!data.IsPicked() && data) data->sock = NULL; data.Clear(); }
bool IsOpen() const { return data && data->IsOpen(); }