EROBaseAsyncSocketError: Response already sent

Hello,

I have just updated ROSDK to version 10.0.0.1627 and while running my set of tests, I’m now seeing the exception in the title with the following call stack:

exception class    : EROBaseAsyncSocketError
exception message  : Response already sent.

thread $26c0 (TROClientThread):
00741d53 +04b ASMServer.exe uROAsyncHttpServer       434   +2 TROAsyncContext.SendResponse
00192370 +010 ASMServer.exe System                 39031  +10 @IntfClear
00192381 +009 ASMServer.exe System                 39078   +6 @IntfCopy
00748898 +11c ASMServer.exe uROSuperHttpServer       261  +18 TROSuperHTTPServer.SendResponse
007217c9 +0b9 ASMServer.exe uROBaseSuperHttpServer   971   +9 TROBaseSuperHTTPServer.AddWaitingRequest
0072312f +72b ASMServer.exe uROBaseSuperHttpServer  1486 +165 TROBaseSuperHTTPServer.IncomingData
00723a6f +8a3 ASMServer.exe uROBaseSuperHttpServer  1637 +126 TROBaseSuperHTTPServer.HandleRequest
0074868a +04a ASMServer.exe uROSuperHttpServer       223   +1 TROSuperHTTPServer.IntRequest
00741a2f +08f ASMServer.exe uROAsyncHttpServer       396   +9 TROAsyncContext.DoRequest
00741792 +68a ASMServer.exe uROAsyncHttpServer       378  +76 TROAsyncContext.DoRead
007426fd +05d ASMServer.exe uROAsyncHttpServer       627   +3 TROAsyncHTTPServer.DoNewConnection
007464ca +03a ASMServer.exe uROAsyncSocket           155   +2 TROClientThread.IntExecute
0051be57 +07f ASMServer.exe uROInitializedThread      58   +7 TROInitializedThread.Execute
00240913 +02b ASMServer.exe madExcept                         HookedTThreadExecute
0024097e +096 ASMServer.exe madExcept                         HookedTThreadExecute
002d23d1 +049 ASMServer.exe System.Classes         15845  +18 ThreadProc
002d2434 +0ac ASMServer.exe System.Classes         15874  +47 ThreadProc
0018ccac +028 ASMServer.exe System                 25778  +45 ThreadWrapper
002407f9 +00d ASMServer.exe madExcept                         CallThreadProcSafe
0024085e +032 ASMServer.exe madExcept                         ThreadExceptFrame
002408d4 +0a8 ASMServer.exe madExcept                         ThreadExceptFrame
76f05d47 +017 KERNEL32.DLL                                    BaseThreadInitThunk
>> created by thread $2158 (TROListenThread) at:
002d2498 +018 ASMServer.exe System.Classes         15903   +1 TThread.Create

thread $26c0 (TROClientThread), inner exception level 1:
>> EROBaseAsyncSocketError, Response already sent
00741d53 +04b ASMServer.exe uROAsyncHttpServer       434   +2 TROAsyncContext.SendResponse
00192370 +010 ASMServer.exe System                 39031  +10 @IntfClear
00192381 +009 ASMServer.exe System                 39078   +6 @IntfCopy
00748898 +11c ASMServer.exe uROSuperHttpServer       261  +18 TROSuperHTTPServer.SendResponse
007217c9 +0b9 ASMServer.exe uROBaseSuperHttpServer   971   +9 TROBaseSuperHTTPServer.AddWaitingRequest
0072312f +72b ASMServer.exe uROBaseSuperHttpServer  1486 +165 TROBaseSuperHTTPServer.IncomingData
00723a6f +8a3 ASMServer.exe uROBaseSuperHttpServer  1637 +126 TROBaseSuperHTTPServer.HandleRequest
0074868a +04a ASMServer.exe uROSuperHttpServer       223   +1 TROSuperHTTPServer.IntRequest
00741a2f +08f ASMServer.exe uROAsyncHttpServer       396   +9 TROAsyncContext.DoRequest
00741792 +68a ASMServer.exe uROAsyncHttpServer       378  +76 TROAsyncContext.DoRead
007426fd +05d ASMServer.exe uROAsyncHttpServer       627   +3 TROAsyncHTTPServer.DoNewConnection
007464ca +03a ASMServer.exe uROAsyncSocket           155   +2 TROClientThread.IntExecute
0051be57 +07f ASMServer.exe uROInitializedThread      58   +7 TROInitializedThread.Execute
002d23d1 +049 ASMServer.exe System.Classes         15845  +18 ThreadProc
002d2434 +0ac ASMServer.exe System.Classes         15874  +47 ThreadProc
0018ccac +028 ASMServer.exe System                 25778  +45 ThreadWrapper
002407f9 +00d ASMServer.exe madExcept                         CallThreadProcSafe
0024085e +032 ASMServer.exe madExcept                         ThreadExceptFrame
002408d4 +0a8 ASMServer.exe madExcept                         ThreadExceptFrame
76f05d47 +017 KERNEL32.DLL                                    BaseThreadInitThunk
002d2498 +018 ASMServer.exe System.Classes         15903   +1 TThread.Create

thread $26c0 (TROClientThread), inner exception level 2:
>> EROBaseAsyncSocketError, Response already sent
00741d53 +04b ASMServer.exe uROAsyncHttpServer       434   +2 TROAsyncContext.SendResponse
00192370 +010 ASMServer.exe System                 39031  +10 @IntfClear
00192381 +009 ASMServer.exe System                 39078   +6 @IntfCopy
00748898 +11c ASMServer.exe uROSuperHttpServer       261  +18 TROSuperHTTPServer.SendResponse
007217c9 +0b9 ASMServer.exe uROBaseSuperHttpServer   971   +9 TROBaseSuperHTTPServer.AddWaitingRequest
0072312f +72b ASMServer.exe uROBaseSuperHttpServer  1486 +165 TROBaseSuperHTTPServer.IncomingData
00723a6f +8a3 ASMServer.exe uROBaseSuperHttpServer  1637 +126 TROBaseSuperHTTPServer.HandleRequest
0074868a +04a ASMServer.exe uROSuperHttpServer       223   +1 TROSuperHTTPServer.IntRequest
00741a2f +08f ASMServer.exe uROAsyncHttpServer       396   +9 TROAsyncContext.DoRequest
00741792 +68a ASMServer.exe uROAsyncHttpServer       378  +76 TROAsyncContext.DoRead
007426fd +05d ASMServer.exe uROAsyncHttpServer       627   +3 TROAsyncHTTPServer.DoNewConnection
007464ca +03a ASMServer.exe uROAsyncSocket           155   +2 TROClientThread.IntExecute
0051be57 +07f ASMServer.exe uROInitializedThread      58   +7 TROInitializedThread.Execute
002d23d1 +049 ASMServer.exe System.Classes         15845  +18 ThreadProc
002d2434 +0ac ASMServer.exe System.Classes         15874  +47 ThreadProc
0018ccac +028 ASMServer.exe System                 25778  +45 ThreadWrapper
002407f9 +00d ASMServer.exe madExcept                         CallThreadProcSafe
0024085e +032 ASMServer.exe madExcept                         ThreadExceptFrame
002408d4 +0a8 ASMServer.exe madExcept                         ThreadExceptFrame
76f05d47 +017 KERNEL32.DLL                                    BaseThreadInitThunk
002d2498 +018 ASMServer.exe System.Classes         15903   +1 TThread.Create

This is quite annoying as it leads to the server termination, effectively resulting in a denial of service.

This happens with only the SSL server part, which uses a TROSuperHTTPServer instance with OpenSSL.SSLEnabled set to true.

Now, this is a quite elusive issue in that if I don’t run some other unit tests before hand, it doesn’t arise.

But as I’m still investigating to narrow down the precise conditions needed to reproduce this, I’m also looking for opinions from your side as to what could be causing this.

Regards

Hi,

this is known issue and we working with it.

as a temporary workaround, you can use synapse version of server: TROSynapseSuperHTTPServer.

note: self-signed SSL certificates are compatible between servers.

Good to know that you are aware of the issue.

Note that I decided to use TROSuperHTTPServer when all the other parts of my server/clients are already based on Synapse because with the previous version (1581), there was no OpenSSL property on TROSynapseSuperHTTPServer

And unless I bodged the migration to 1627, I still don’t see SSL related properties on TROSynapseSuperHTTPServer.

Hi,

common steps for adding OpenSSL support to Synapse library:
add ssl_openssl3 unit to project. it will add SSL support to synapse library.


EDIT: Looks like we haven’t added possibility to configure SSL in TROSynapseSuperHTTPServer :frowning:

Is this something that could be considered for a future release?

Logged as bugs://D19690.

Hi,

I’ve logged issue with low priority so don’t wait that it will be in next release