Hi Andrew, In fact, the exception I am receiving is the following one: java.lang.ClassCastException: > gnu.java.nio.ServerSocketChannelImpl cannot be cast to java.nio.channels.SocketChannel What can make such an exception to occur? Also can it cause an application to terminate with signal SIGSEGV? Many Thanks, David Sayada. -----Original Message----- From: Andrew Haley [mailto:aph-gcc@xxxxxxxxxxxxxxxxxxx] Sent: Wednesday, August 29, 2007 2:59 PM To: David Sayada Cc: classpath@xxxxxxx; java@xxxxxxxxxxx; Amnon David Subject: Re: SIGSEGV issue David Sayada writes: > Hi all, > > This email is following the last email I sent a few days ago about SIGSEGV > occurring in a java CNI application compiled with gcj 4.1.2 on a PXA270 > platform. > > I have traced the place in the code causing the exception, and please the > see below the concerning code: > > if ( nReadBytes == 0 ) > { > continue; > } > > for (int i=0; i<nReadBytes; i++) > { > info.m_strRequest += (char)info.m_readBuff.get(i); > } > > I have read in some places that using UTF16 can be problematic with CNI. Not to my knowledge. > I think that the char cast automatically uses UTF16 instead of > UTF8. Java characters are Unicode by definition, so promoting a byte in this way gets you a 16-bit Unicode Java character. That's perfectly alright as long as you're sure that your byte is ASCII. It's certainly not going to cause a SEGV. > Am I right? Is there a way to write this code without using the > char cast? No. This code is grossly inefficient, though: you really ought to be using StringBuffer.append(char) like this: RequestBuffer.append((char)info.m_readBuff.get(i)); Andrew.