@@ -130,8 +130,12 @@ void HttpAsyncServer::onStreamReceive(HttpServerClient& client, AsyncBufferView:
130130
131131 if (client.response .mustBeFlushed ())
132132 {
133- auto onAfterWrite = [this , &client](AsyncBufferView::ID) { closeAsync (client); };
134- SC_TRUST_RESULT (client.writableStream ->write (client.response .getSpan (), onAfterWrite));
133+ client.readableSocketStream .destroy (); // emits 'eventClose' cancelling pending reads
134+ client.readableSocketStream .eventData = {}; // De-register data event
135+
136+ auto onAfterWrite = [this , &client](AsyncBufferView::ID) { closeAsync (client); };
137+ Result res = client.writableStream ->write (client.response .getSpan (), onAfterWrite);
138+ SC_TRUST_RESULT (res);
135139 client.writableStream ->end (); // TODO: This must be called only if actually ended...
136140 }
137141}
@@ -195,12 +199,7 @@ void HttpAsyncServer::closeAsync(HttpServerClient& requestClient)
195199 return ;
196200 }
197201
198- if (useStreams)
199- {
200- requestClient.readableSocketStream .destroy (); // emits 'eventClose' cancelling pending reads
201- requestClient.writableSocketStream .end (); // emits 'eventFinish' cancelling pending writes
202- }
203- else
202+ if (not useStreams)
204203 {
205204 if (not requestClient.asyncSend .isFree ())
206205 {
@@ -210,8 +209,8 @@ void HttpAsyncServer::closeAsync(HttpServerClient& requestClient)
210209 {
211210 (void )requestClient.asyncReceive .stop (*eventLoop);
212211 }
213- SC_TRUST_RESULT (requestClient.socket .close ());
214212 }
213+ SC_TRUST_RESULT (requestClient.socket .close ());
215214 const bool wasFull = not httpServer.canAcceptMoreClients ();
216215
217216 SC_TRUST_RESULT (httpServer.deallocateClient (requestClient));
0 commit comments