[omniORB] question on behavior of client on server restart - possible hang?

Duncan Grisby duncan at grisby.org
Tue Aug 11 13:21:52 BST 2009


On Wednesday 5 August, Igor Lautar wrote:

> We are hunting down a problem with our client SW using omniORB (client and 
> server are v4.1.1 on windows) for communication.

Can you update to 4.1.4?  That has a number of bug fixes that may be
relevant.

> Our problem could be explained, if omniORB call does not return. We think we 
> saw something like this in past, but are not sure.
> 
> My question is:
> Is it possible (under certain circumstances) that client call hangs 
> indefinitely? We do not have clientCallTimeOutPerid set (its 0).
> Would it be possible that client ORB never detects that server is gone (other 
> than one way calls)?

Yes, it can happen. When omniORB makes a call, it sends data on a TCP
connection, then blocks waiting for the response. If the server dies,
TCP can fail to notice, and the OS may leave the recv() call blocked for
ever. There's not much omniORB can do in this situation, other than have
a call timeout.

You could try setting the SO_KEEPALIVE socket option on omniORB's
connections, by adding it to src/lib/omniORB/orbcore/tcp/tcpEndpoint.cc
where it sets other options. That will check the connection if it's been
idle for a long time.

Cheers,

Duncan.

-- 
 -- Duncan Grisby         --
  -- duncan at grisby.org     --
   -- http://www.grisby.org --



More information about the omniORB-list mailing list