Thank you Benoit,
Now I am using Ice3.2.1 on FreeBSD 6.2.
After using Ice.Trace.Protocol=2 property, I was able to see following messages on client and server respectively.
Client Protocol Trace.
Code:
[ 05/09/08 11:13:20.827 Protocol: sending asynchronous request
message type = 0 (request)
compression status = 0 (not compressed; do not compress response, if any)
message size = 1052
request id = 40
identity = DbPutInterface
facet =
operation = put
mode = 0 (normal)
context = ]
[ 05/09/08 11:13:20.842 Protocol: received close connection
message type = 4 (close connection)
compression status = 1 (not compressed; compress response, if any)
message size = 14 ]
Server Protocol Trace.
Code:
[ 05/09/08 11:15:31.451 Protocol: received request during closing
(ignored by server, client will retry)
message type = 0 (request)
compression status = 0 (not compressed; do not compress response, if any)
message size = 1052
request id = 40
identity = DbPutInterface
facet =
operation = put
mode = 0 (normal)
So, when I kill my server application, I was thinking that, server is properly sending callback to client and client is not receiving it. But, after looking at the above trace information, I came to know of the policy that server do not throw any exception to client to let it know that it has received the message after closing.
My client is not receiving any exception from Ice layer on receiving the following message
[ 05/09/08 11:13:20.842 Protocol: received close connection
Since I am using IceGrid, on receiving close connection message, client is requesting IceGrid again to restart the server application. But, how do I let my previous async call waiting thread know that there would be no callback, since server has terminated and new server instance will restart.
I do not wish to use timed wait on my client for callback, as it will affect overall performance. Please advice.
Thanks.