From: Tom T. <tom...@se...> - 2006-01-30 19:04:04
|
Sounds reasonable. Thanks for looking into it. Looking forward to the patch. -Tom on 1/30/2006 6:03 AM Ian Ibbotson said the following: > Hiya Tom. > > The problem is that it's hard (not possible) for JZKit to tell the > difference between a legitimate close of the other end of the > association, and the remote association simply shutting down the > socket. Although it may properly be thought of as "Not being an > exceptional situation", we've not yet found a better model for the > behaviour in java. When we port to NIO then there are some cleaner > solutions we can adopt, but for now, the best I can do is to catch > and deal with this exception inside the endpoint, so you don't see it. > I've made that change and committed it to subversion, i'll make a > patch release shortly and let you know. > > Ian. > > On Wed, 2006-01-04 at 09:40 -0800, Tom Talbott wrote: >> Hello, >> >> I am in the process of porting an application over from using jzkit >> 1.2.4 to jzkit2 2.0.1. Most everything works, but I am getting a >> SocketException when I close down the Searchable object (in my case the >> Z3950Origin). I can reproduce the problem by adding "s.close();" as the >> last line of the testLOC() method of your Z3950Test.java test case. >> >> ============= >> for ( int i=0; ( ( e.hasMoreElements() ) && ( i < 60 ) ); i++) { >> System.err.println("Processing result "+i); >> Object o = e.nextElement(); >> System.err.println(o); >> } >> >> s.close(); >> ============== >> >> The close is required to shutdown the search thread, unless I'm missing >> something. If I remove it like you have in your test case, then I get a >> bunch of threads lying around. >> >> Below is the log. It looks like a close is encoded and sent, but the >> socket is closed before the response can be read. >> >> Jan 4, 2006 9:29:46 AM org.jzkit.search.provider.z3950.Z3950Origin close >> FINE: Z3950Origin::close() >> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint shutdown >> FINE: ZEndpoint::shutdown() - host=z3950.loc.gov status=2 running=true >> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint encodeAndSend >> FINE: encodeAndSend... >> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint run >> SEVERE: problem >> java.net.SocketException: socket closed >> at java.net.SocketInputStream.socketRead0(Native Method) >> at java.net.SocketInputStream.read(SocketInputStream.java:129) >> at java.io.BufferedInputStream.fill(BufferedInputStream.java:183) >> at java.io.BufferedInputStream.read(BufferedInputStream.java:201) >> at >> org.jzkit.a2j.codec.runtime.BERInputStream.read(BERInputStream.java:661) >> at >> org.jzkit.a2j.codec.runtime.BERInputStream.decodeNextTag(BERInputStream.java:155) >> at >> org.jzkit.a2j.codec.runtime.BERInputStream.tag_codec(BERInputStream.java:126) >> at >> org.jzkit.a2j.codec.runtime.BERInputStream.constructedBegin(BERInputStream.java:541) >> at >> org.jzkit.a2j.codec.runtime.BERInputStream.sequenceBegin(BERInputStream.java:525) >> at >> org.jzkit.z3950.gen.v3.Z39_50_APDU_1995.InitializeRequest_codec.serialize(InitializeRequest_codec.java:52) >> at >> org.jzkit.a2j.codec.runtime.BERInputStream.implicit_tag(BERInputStream.java:612) >> at >> org.jzkit.a2j.codec.runtime.BERInputStream.choice(BERInputStream.java:488) >> at >> org.jzkit.z3950.gen.v3.Z39_50_APDU_1995.PDU_codec.serialize(PDU_codec.java:65) >> at org.jzkit.z3950.util.ZEndpoint.run(ZEndpoint.java:666) >> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint run >> INFO: SocketException >> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint run >> INFO: java.net.SocketException: socket closed - hostname=z3950.loc.gov >> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint notifyAPDUEvent >> FINE: notifyAPDUEvent : 22 >> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint notifyAPDUEvent >> FINE: Incoming PDU refid: null >> Jan 4, 2006 9:29:46 AM org.jzkit.z3950.util.ZEndpoint run >> FINE: End of ZEndpoint listening thread for host z3950.loc.gov active z >> thread counter=0 >> >> Thanks for looking into this, >> >> > ------------------------------------------------------------------------ > > > Ian Ibbotson, Director > Knowledge Integration Ltd > Sheffield Technology Parks > Cooper Buildings > Arundel Street > Sheffield > South Yorkshire > S1 2NS > email: ian...@k-... > Tel: 0114 221 0746 > Fax: 0114 221 1801 > http://www.k-int.com > -- Tom Talbott Serials Solutions <http://www.serialssolutions.com> tom...@se... 206-545-9056 x1081 |