[omniORB] Timeouts on oneway calls
Serguei.Kolos at cern.ch
Fri Apr 4 11:59:58 BST 2008
Doing some further investigation I have realized that the same applies
to a normal two-way calls
as well. The problem is that it is possible that tcpConnection::Send
function blocks forever on the
::send call (tcpConnection.cc:205) if the message is large enough and
the server is hanging. This
happens because the tcp sockets are used in the blocking mode
(O_NONBLOCK is not set).
I understand that using non-blocking mode for sockets is more
problematic since EAGAIN error
requires a non-trivial handling but on the other hand this is a serious
issue in my case.
I have a reliable client which is sending data and non-reliable servers
which are written by different
users and may die (easy case) or hang. In the latter case my client also
hangs forever which is
I'll be glad to hear any ideas on how to handle this issue.
Serguei Kolos пишет:
> I have noticed a weired behavior of timeouts for one-way calls - it
> seems that they depend on the
> amount of data which is being sent. The one-way function takes
> sequence of bytes as its argument
> and if the server application hangs by some reason then I get the
> following behavior on the client
> 1. If the sequence is shorter then 4KB then the client gets the
> TRANSIENT exception with the Timeout minor
> code right after 10 seconds which is the timeout that I'm using
> 2. If the sequence size is more then 5KB then the client application
> hangs forever. One interesting point is
> that if I stop the hanging client with Ctrl-Z and then bring it
> back with the 'fg' command then the one-way
> function immediately throws the TRANSIENT Timeout exception.
> I'm using omniORB 4.0.7 on SLC4 Linux with gcc 3.4
> Does anybody have an idea why I got this behavior and how this could
> be improved ?
> omniORB-list mailing list
> omniORB-list at omniorb-support.com
More information about the omniORB-list