Hi,Laurinolli,
    Thank you for your test case.Here is the result as following:
    firstly,when the host is not present on the network,the result is same in 
both desktop PC and notebook one.The result is that:

Waited: 5000
Connected: false, and no exception throwed,the result seems right as we expected
    secondly,when the Host is present ,but does not have a daemon listening on 
the expected port,
     when I run the test case in desktop PC ,the result is:
Waited: 5000 
Connected: false, and no exception throwed.

     when I run the test case in Notebook PC ,the result is:
Waited: 1000 
Connected: false,
Also got exception:
java.net.ConnectException: Connection refused
    
Thank you again.

BR
Allen


    

----- Original Message ----- 
From: "Tuure Laurinolli" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, September 17, 2008 4:10 PM
Subject: Re: API Issue: ConnectFuture.await()


> Allen Jiang wrote:
>> Hi,Laurinolli,
>> Thank you for your suggestion,and I have create a test case as following:
> 
> Still missing imports. I fixed that, and the target address. I also
> added some more diagnostics on what the result of the ConnectFuture
> actually was. Improved test case at the bottom.
> 
> 
>> The print result is different in different PC, 
>> In  notebook PC(ThinkPad T61,T8300, 2 CPU) the result is :
>> 0
> 
>> In  desktop PC(2 CPU) the result is :
>> 5015'
> 
>> the result seems right.
>> I don't know why ?
> 
> Both results seem plausible. Note that you aren't checking the result of
> the connectFuture. It could be a) that the connection was established,
> or b) that the connection was not-established quickly.
> 
> See my results with better diagnostics below. They coincide with what I
> would expect from await(). Can you repeat your tests with the improved
> test case?
> 
> 
> Expectged results in various cases:
> 
> 
> Illegal address, the connection attempt fails immediately:
> 
> Waited: 0
> Connected: false
> Also got exception:
> java.nio.channels.UnresolvedAddressException
>        at sun.nio.ch.Net.checkAddress(Net.java:30)
>        at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:487)
>        at
> org.apache.mina.transport.socket.nio.NioSocketConnector.connect(NioSocketConnector.java:156)
>        at
> org.apache.mina.transport.socket.nio.NioSocketConnector.connect(NioSocketConnector.java:46)
>        at
> org.apache.mina.core.polling.AbstractPollingIoConnector.connect0(AbstractPollingIoConnector.java:321)
> 
> 
> Host is not present on the network, the packets are lost. There is no
> exception, and the connection attempt waits about 5000 ms as expected,
> on both a single-CPU desktop and quad-CPU server:
> 
> Waited: 5001
> Connected: false
> 
> Host is present but does not have a daemon listening on the expected port:
> 
> Waited: 1
> Connected: false
> Also got exception:
> java.net.ConnectException: Connection refused
>        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
>        at
> sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:574)
>        at
> org.apache.mina.transport.socket.nio.NioSocketConnector.finishConnect(NioSocketConnector.java:190)
>        at
> org.apache.mina.transport.socket.nio.NioSocketConnector.finishConnect(NioSocketConnector.java:46)
>        at
> org.apache.mina.core.polling.AbstractPollingIoConnector.processSessions(AbstractPollingIoConnector.java:420)
>        at
> org.apache.mina.core.polling.AbstractPollingIoConnector.access$500(AbstractPollingIoConnector.java:64)
>        at
> org.apache.mina.core.polling.AbstractPollingIoConnector$Worker.run(AbstractPollingIoConnector.java:468)
>        at
> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>        at java.lang.Thread.run(Thread.java:619)
> 
> And finally the case where the host is present and is listening:
> 
> Waited: 13
> Connected: true
> 
> 
> 
> Improved test case:
> 
> import org.apache.mina.core.future.ConnectFuture;
> import org.apache.mina.core.service.IoHandlerAdapter;
> import java.net.InetSocketAddress;
> import org.apache.mina.transport.socket.nio.NioSocketConnector;
> 
> class ConnectFutureTest {
>        public static void main(String[] args) {
>                NioSocketConnector connector = new NioSocketConnector();
>                connector.setHandler(new IoHandlerAdapter());
>                for(int i=0;i<5;i++){
>                        ConnectFuture connectFuture =
> connector.connect(new InetSocketAddress("192.168.18.9", 4567));
>                        try {
>                                long time=System.currentTimeMillis();
>                                connectFuture.await(5000);//5000
> millisesonds
> 
>                                System.err.println("Waited: " +
> (System.currentTimeMillis()-time));
>                                System.err.println("Connected: " +
> connectFuture.isConnected());
>                                if (connectFuture.getException() != null) {
>                                        System.err.println("Also got
> exception:");
> 
> connectFuture.getException().printStackTrace();
>                                }
>                        } catch (InterruptedException e) {
>                                // TODO Auto-generated catch block
> 
> 
>                                e.printStackTrace();
>                        }
>                }
>                System.exit(0);
>        }
> }
>

Reply via email to