以下代码中,IcpSocketClient为socket封装类,client.call调用远程服务器上的类、方法 
windows中,如果未连接到相应IP、端口,则立马报connection refused异常;而在linux下,未连接到相应的IP、端口,则延缓3分钟左右,报connection timeout异常,请问,为何linux会连接3分钟再超时,如何解决在两种系统下,保持一致的异常
IcpSocketClient client = new IcpSocketClient("192.168.1.54", 1210);
        try
        {
            client.setTryTimes(0);
            Object returnObj = client.call("IWatcherService", "getState", new Object[] {});
            if (returnObj != null)
            {
                return (ResourceStatus)returnObj;
            }
        }
        catch (Exception e)
        {
            logger.error("Check resource failed, resource key=[" + resource.getKey() + "].");
        }

解决方案 »

  1.   

    这个IcpSocketClient没听过呢不过Socket.connect()不是有超时值设置吗你这句client.setTryTimes(0);是不是也是同样的效果我的意思是你必须指定相同的超时值,不然只能取操作系统默认的特征了
      

  2.   

    IcpSocketClient就是自己封装的Socket,超时值都是设置成client.setTryTimes(0),这个封装在IcpSocketClient里;如果取操作系统默认的特征的话,由于30秒内有可能会发4000个线程,而这4000个线程又使用线程池管理,线程池最大值为50,因此linux中阻塞情况肯定很严重,不采用该方法
      

  3.   

    client.setTryTimes(0)你不要设置成0啊~~~~~~~~~~~~~~~~~~
    你自己设置一个可接受的值(单位:毫秒)
      

  4.   

    那windows为何不是啊,而是立马报connection refused异常,而不是超时,你说的不对,并且也试了setTimeout(10)
      

  5.   

    好吧,你这非原生态的socket,我表示不懂
      

  6.   

    什么非原生态了,就是把IcpSocketClient继承一下socket