From de7011e54ad88656e01c92a88dd053a94b5acc6b Mon Sep 17 00:00:00 2001 From: linuxdaemon Date: Wed, 22 May 2019 13:47:17 -0500 Subject: Add an overload of StreamSocket::Close which closes when all data has been written. Fixes sending large pages in m_httpd (#1646). --- include/inspsocket.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/inspsocket.h b/include/inspsocket.h index a41c3ebc7..a07c2eb6f 100644 --- a/include/inspsocket.h +++ b/include/inspsocket.h @@ -227,6 +227,12 @@ class CoreExport StreamSocket : public EventHandler }; private: + /** Whether this socket should close once its sendq is empty */ + bool closeonempty; + + /** Whether the socket is currently closing or not, used to avoid repeatedly closing a closed socket */ + bool closing; + /** The IOHook that handles raw I/O for this socket, or NULL */ IOHook* iohook; @@ -273,7 +279,9 @@ class CoreExport StreamSocket : public EventHandler public: const Type type; StreamSocket(Type sstype = SS_UNKNOWN) - : iohook(NULL) + : closeonempty(false) + , closing(false) + , iohook(NULL) , type(sstype) { } @@ -334,6 +342,10 @@ class CoreExport StreamSocket : public EventHandler * Close the socket, remove from socket engine, etc */ virtual void Close(); + + /** If writeblock is true then only close the socket if all data has been sent. Otherwise, close immediately. */ + void Close(bool writeblock); + /** This ensures that close is called prior to destructor */ CullResult cull() CXX11_OVERRIDE; -- cgit v1.2.3