diff --git a/uppsrc/Web/httpsrv.cpp b/uppsrc/Web/httpsrv.cpp index 752b66182..c24f00099 100644 --- a/uppsrc/Web/httpsrv.cpp +++ b/uppsrc/Web/httpsrv.cpp @@ -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); diff --git a/uppsrc/Web/socket.cpp b/uppsrc/Web/socket.cpp index 03262fe71..9eb1cef6c 100644 --- a/uppsrc/Web/socket.cpp +++ b/uppsrc/Web/socket.cpp @@ -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) { diff --git a/uppsrc/Web/socket.h b/uppsrc/Web/socket.h index 6fc7fe15f..9664017cf 100644 --- a/uppsrc/Web/socket.h +++ b/uppsrc/Web/socket.h @@ -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) {} + Socket() { ClearError(); } + Socket(One 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 d) { data = d; data->sock = this; } + void Attach(One 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(); }