Yeah, the behavior definitely changed in RC33, I am still having
difficulties to close a socket while the 3G connectivity has been
lost.

On 19 fév, 03:52, Gil <[email protected]> wrote:
> Yes, the phone still has the connection to the router however what
> matters is the status of the TCP socket which needs end-to-end
> connectivity. Applications need to know when TCP connectivity is lost.
>
> Not all TCP based protocols require a response for a request. For
> example in XMPP you sendkeep-alivepackets to the server the server
> does not actually respond. Also, sending packets just to see if the
> TCP connection isaliveis a waste of battery power.
>
> It is wrong for a disconnected socket not to throw an IOException when
> trying to send data as well as when executing a blocking read. It also
> needs to throw and EOFException when the server disconnects. While
> this behavior is not in the documentation one would expect the same
> API behavior in dalvik and JVM from this standpoint. I want to
> reiterate that prior firmware versions (RC28/maybe RC30 and earlier)
> exhibited the correct behavior from this standpoint.  Even the current
> emulator works fine by throwing an IOException from a blocking read 20
> to 30 seconds after the TCP connection is lost.
>
> On Feb 18, 5:28 pm, "Justin (Google Employee)" <[email protected]>
> wrote:
>
> > I'm looking into this further, although I'm not sure that this is
> > actually wrong behavior. In terms of the network interface, there is
> > no change when the router loses internet connectivity. The phone is
> > still connected to the router. The only way anything can really deal
> > with this is to have a timeout. If no response is sent in X seconds,
> > assume the remote server died or there is no path to it. While
> > inconvenient, you should be able to extend BufferedInputReader to use
> > this timeout mechanism. Have a timer thread, that if the timer expires
> > and no bytes have been read, throw an exception.
>
> > I'll look into this further.
>
> > Cheers,
> > Justin
> > Android Team @ Google
>
> > On Feb 17, 5:02 pm, Gil <[email protected]> wrote:
>
> > > Can anyone from Google comment on this matter?
>
> > > On Feb 17, 11:42 am, Gil <[email protected]> wrote:
>
> > > > I did further testing and I was wrong about one thing: the disconnect
> > > > is not detected at all (not even after 5 minutes as I said initially).
> > > > The reason I though that the disconnection was detected after 5 min.
> > > > is because the W-Fi was going to sleep. If IkeepWi-Fialiveby not
> > > > allowing the phone to go to sleep the problem is quite evident. I also
> > > > looked at the GTalk debug messages and it turns out that it has the
> > > > same problem (it never detects that it is disconnected from the
> > > > server).
>
> > > > On Feb 17, 11:19 am, Gil <[email protected]> wrote:
>
> > > > > Unfortunately, watching the network state will not always work because
> > > > > it does not account for end-to-end TCP connectivity. The server may
> > > > > crash or its Internet connection may go down and you won't know about
> > > > > it.
>
> > > > > On Feb 17, 10:05 am, Guillaume Perrot <[email protected]>
> > > > > wrote:
>
> > > > > > Yes it's exactly what happens since RC33.
> > > > > > Kinda annoying. I have to close sockets in a separate thread when I
> > > > > > receive a connectivity event indicating the network is down or we
> > > > > > switched network. This thread becomes zombie most of the time 
> > > > > > because
> > > > > > the socket refuses to close (deadlock with a nativeread).
>
> > > > > > 2009/2/17 Gil <[email protected]>:
>
> > > > > > > What is disturbing is that event if you try to send data on a 
> > > > > > > socket
> > > > > > > that is not actually connected (according to the situation I 
> > > > > > > outlined
> > > > > > > initially) the socket does not throw an IOException. It simply 
> > > > > > > thinks
> > > > > > > it is still connected.
>
> > > > > > > On Feb 17, 7:21 am, Guillaume Perrot <[email protected]> 
> > > > > > > wrote:
> > > > > > >> I had the same problem too.
> > > > > > >> Plus when I loose connectivity, it's nearly impossible not to 
> > > > > > >> block on
> > > > > > >> socket.close();
> > > > > > >> It takes forever in that case.
> > > > > > >> I tried both plain and ssl sockets, same behavior in RC33.
>
> > > > > > >> On Feb 17, 1:23 am, Marc <[email protected]> wrote:
>
> > > > > > >> > I've seen inconsistent behavior from RC30 on in this regard.  
> > > > > > >> > The
> > > > > > >> > IOException happens anywhere from instantly to five minutes 
> > > > > > >> > later.  It
> > > > > > >> > seems like a bug to me.
>
> > > > > > >> > Marc
>
> > > > > > >> > On Feb 16, 2:29 pm, Gil <[email protected]> wrote:
>
> > > > > > >> > > I finally got to test some code on the RC33 release and I 
> > > > > > >> > > uncovered a
> > > > > > >> > > difference in the network code compared to earlier versions 
> > > > > > >> > > and the
> > > > > > >> > > emulator. I'm using a persistent TLS connection to a server 
> > > > > > >> > > and a
> > > > > > >> > > BufferedInputStream to read from the socket. The problem is 
> > > > > > >> > > that the
> > > > > > >> > > read method throws an IOException only 5 minutes after the 
> > > > > > >> > > Wi-Fi
> > > > > > >> > > connection looses connectivity (I unplug the Internet 
> > > > > > >> > > connection from
> > > > > > >> > > the router to simulate a connection problem). In RC30 and 
> > > > > > >> > > earlier
> > > > > > >> > > version as well as the latest emulator version (SDK 1.1) 
> > > > > > >> > > read throws
> > > > > > >> > > an exception after approximately 30 seconds after the 
> > > > > > >> > > connectivity is
> > > > > > >> > > lost. My code uses an infinite timeout for read 
> > > > > > >> > > (setSoTimeout(0)).
>
> > > > > > --
> > > > > > Guillaume Perrot
> > > > > > Software Engineer at Ubikod
> > > > > > BuddyMob developer
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to