When shutting down our OMM consumer with our OMM provider, the OMM provider logs an error "
RSSL Channel read failed on connection" even if - I hope - the consume cleans up properly.
Any idea what the consumer may miss on clean up?
@christian.springer
I can replicate the issue. I got the following log when the consumer application is shutdown properly.
<- Received LoggerNotifyEvent: [Wed Nov 09 10:26:56 2016]: (ComponentName) Static: (Severity) Error: RSSL Channel read failed on connection "Connection_OMMProv". Channel will be closed. (Internal debug info: "<..\..\..\Ripc\Impl\ripcsrvr.c:6654> Error:1002 ripcRead() failure. Connection reset by peer", errno: RSSL_RET_FAILURE [0] - )
According to the information from MSDN regarding select() function:
For connection-oriented sockets, readability can also indicate that a request to close the socket has been received from the peer. If the virtual circuit was closed gracefully, and all data was received, then a recv will return immediately with zero bytes read. If the virtual circuit was reset, then a recv will complete immediately with an error code such as WSAECONNRESET. The presence of OOB data will be checked if the socket option SO_OOBINLINE has been enabled (see setsockopt).
It indicates the application needs to call read/recv function in order to detect the disconnection. Then, it needs to verify the return value or the error code.
In RFA C++, if the connection is shutdown properly, it will show the above error with RSSL_RET_FAILURE [0].
On the other hand, if the connection has been reset, it will show the following log with the system error, such as 10054.
[Wed Nov 09 11:04:02 2016]: (ComponentName) Static: (Severity) Error: RSSL Channel read failed on connection "Connection_OMMProv". Channel will be closed. (Internal debug info: "<..\..\..\Ripc\Impl\ripcsrvr.c:6662> Error:1002 ripcRead() failure. System errno: (10054)", errno: RSSL_RET_FAILURE [10054] - )
It looks like to be an expected behaviour.
Perhaps the consumer doesn't actually logout ?
I think the consumer properly logs out:
And it receives the Stream Closed Events for all subscriptions.