Az Exception jó dolog, ércsük?!

https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/class…
Tippeljük meg, mi történik, ha a 150-es sorban lévő socketRead0 (aki egy natív metódus) dob egy Exceptiont, ami valamiért nem ConnectionResetException, hanem más. (Megjegyzés: adott esetben az is lehet, hogy Aix-on más errno értékek is előfordulhatnak, mint amire a derék coder felkészült Linuxos tapasztalatai alapján).

Az én tippem: lefut a 157-én az implReleaseFD, azután elégedetten kilépünk a függvénnyel az illető Exception-nal, de anélkül, hogy a saját státusz-változóinkban követtük volna, hogy hát bizony itten valami baj volt, a legjobb lenne lezárni ezt a kapcsolatot. (Gyk: nagyon is véges azoknak a hibáknak a száma, amik nem fatális hibát jelentenek, mondjuk EINTR, EAGAIN, EWOULDBLOCK).

Szóval ha a hívó is úgy áll hozzá, hogy a hiba arra való, hogy ne kezeljük korrektül, akkor előfordulhat például az, hogy újra meghívják ugyanezt a metódust, csak mostanra már a file descriptor is érvénytelen lesz.

Hozzászólások

jdk7, ez is de rég volt...

Régóta vágyok én, az androidok mezonkincsére már!

szvsz, a hivo megkapja a IOException-t, azt le kell neki valahogy kezelnie. ha ezek utan ujra meghivja a read()-ot, akkor magara vessen.

A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

+1, en sem vagyok biztos benne, hogy ertem a konkluziot. Az exceptiont ott kell elkapni, ahol tudsz vele kezdeni valamit - a connection reset itt pl. olyan, de minden mast tovabbenged. Ha te, mint a hivo egy exception utan raprobalsz ujra ugyanugy, akkor igen, annak lehet mellekhatasa.

Ha ez ilyen elvi kerdes, hogy lehet-e rosszul hasznalni az exceptionoket, akkor persze, lehet.

szvsz, a hivo megkapja a IOException-t, azt le kell neki valahogy kezelnie.

Épp erről szól a bejegyzés is. A hívó, a SocketInputStream, megkapja az IOException-t és nem kezeli le teljesen, hanem félig meddig. Ha az őt hívó is hasonló alaposságú, akkor lehet gond. A SocketInputStream, bizonyos exception-ök esetén, tudná az ő szemszögéből korrektül kezelni a problémát, de nem teszi. A legnagyobb gond ilyenkor, hogy akár nyitva is maradhat a kapcsolat, senki sincs kötelezve, hogy lezárja. Egy idő után meg kifogynak a file descriptorok.

> de anélkül, hogy a saját státusz-változóinkban követtük volna, hogy hát bizony itten valami baj volt, a legjobb lenne lezárni ezt a kapcsolatot

Honnan veszed, hogy ez nem történik meg? Ott nem, de máshol? A read avval indul, hogy "if (impl.isConnectionReset())". Tehát konkrétan mi a hiba?

Mondanám, hogy jelentsd nekik, mert van bugtrackerük, de ez JDK7. Simán lehet, hogy ismerte hiba, de ebben a verzióban már nem fogják javítani.