[omniORB] Why do oneway requests hang on disconnected network?
Sean Parker
supinlick at yahoo.com
Mon Nov 27 12:45:38 GMT 2006
Any chance on implementing oneways as UDP messages? (This
would be ideal for setting up a work around in environments
"hostile" to "slow" protocols, although "unreliable").
Certainly, if I were to use oneway's, it'd only be with the
intent of optimizing some part of our system for speed -
something UDP would be a good fit for...
Of course that'd require work to the internals of OmniORB
to also listen on another port for possible incoming UDP
messages....
Sean Parker
--- Duncan Grisby <duncan at grisby.org> wrote:
> On Wednesday 15 November, Tuyen Chau wrote:
>
> > Why do "oneway" requests hang, instead of return an
> COM_FAILURE
> > exception, when the network is disconnected? As part
> of testing our
> > product, we unplugged the network cable. We were
> surprised to find
> > that these oneway requests executed without errors for
> a good 5-10
> > minutes or so, then they blocked indefinitely. If we
> replaced the
> > network cable, the calls eventually unblocked and
> everything worked
> > again. Our best guess at the moment is that there is a
> data buffer
> > for outgoing requests and the oneway requests block
> when the buffer is
> > full.
>
> omniORB doesn't buffer requests at all. In a oneway
> request, it simply
> sends the data through the TCP socket and carries on its
> way. The
> buffering you are seeing is in the TCP stack. Eventually,
> if the server
> isn't responding (because the cable's not there), the TCP
> stack will
> block when omniORB tries to send.
>
> If the OS doesn't notice that the connection is broken,
> it won't tell
> omniORB when omniORB tries to send, which is why you see
> that you can
> send lots of oneway requests before anything untoward
> happens. The way
> TCP works, there's no way to tell that a cable has been
> unplugged and
> quickly close the connection.
>
> > Is there any way to alter this behavior and receive a
> COM_FAILURE
> > exception instead?
>
> If you set a timeout on the calls, they will timeout if
> the send call
> blocks, leading to a COMM_FAILURE exception. That won't
> make it fail any
> quicker, though, because the send won't block and
> therefore timeout
> until the TCP buffers are full.
>
> The only other alternative is to modify omniORB so it
> sets the
> SO_KEEPALIVE socket option on its tcp sockets. That way
> the OS will send
> keepalive packets, and tear down the connection if the
> keepalives are
> lost. But with that, you're at the mercy of the OS as to
> when it starts
> sending keepalives, and once it does, how often it sends
> them and how
> many must go missing before it gives up. See this from
> the Linux tcp
> manpage for example:
>
> SYSCTLS
> These variables can be accessed by the
> /proc/sys/net/ipv4/* files or
> with the sysctl(2) interface. In addition, most
> IP sysctls also apply
> to TCP; see ip(7).
> ...
> tcp_keepalive_intvl
> The number of seconds between TCP
> keep-alive probes. The
> default value is 75 seconds.
>
> tcp_keepalive_probes
> The maximum number of TCP keep-alive probes
> to send before giv-
> ing up and killing the connection if no
> response is obtained
> from the other end. The default value is
> 9.
>
> tcp_keepalive_time
> The number of seconds a connection needs to
> be idle before TCP
> begins sending out keep-alive probes.
> Keep-alives are only
> sent when the SO_KEEPALIVE socket option
> is enabled. The
> default value is 7200 seconds (2 hours).
> An idle connection is
> terminated after approximately an
> additional 11 minutes (9
> probes an interval of 75 seconds
> apart) when keep-alive is
> enabled.
>
>
> The default times mean that SO_KEEPALIVE is basically
> useless for your
> situation unless you radically reduce the times, but the
> settings are
> for the whole machine, not just your process.
>
> Cheers,
>
> Duncan.
>
> --
> -- Duncan Grisby --
> -- duncan at grisby.org --
> -- http://www.grisby.org --
>
> _______________________________________________
> omniORB-list mailing list
> omniORB-list at omniorb-support.com
>
http://www.omniorb-support.com/mailman/listinfo/omniorb-list
>
God Bless
Sean Parker
____________________________________________________________________________________
Cheap talk?
Check out Yahoo! Messenger's low PC-to-Phone call rates.
http://voice.yahoo.com
More information about the omniORB-list
mailing list