iteye_5871
iteye_5871
2012-07-03 20:30

linux下如何判断server关闭后socket不可用?

已采纳

假设在linux上通过杀进程的方式停止socketserver的运行,那么在杀进程前已经建立的socket连接如何判断其已经失效了?
此时判断isClosed为false,isBound和isConnected都是true,而且通过sendUrgentData的方式验证,在windows系统下会抛出异常,可以断定失效,但是在linux下无异常,没办法判断连接失效?想知道在linux下如何判读啊?
测试代码:
Socket socket = new Socket("172.16.132.189", 5656);
socket.setSoTimeout(3000);

    LOG.info("--wait--");
    LOG.info("--do--");
    LOG.info("--isClosed--"+socket.isClosed());
    LOG.info("--isBound--"+socket.isBound());
    LOG.info("--isConnected--"+socket.isConnected());

    socket.sendUrgentData(0xff);
    socket.close();
    LOG.info("--over--");

在执行到LOG.info("--wait--")的时候通过杀进程的方式将sockerserver关闭

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • aa1aa3 爱上一条鱼 9年前

    [quote]8. SO_OOBINLINE

      public boolean getOOBInline() throws SocketException
      public void setOOBInline(boolean on) throws SocketException
      如果这个Socket选项打开,可以通过Socket类的sendUrgentData方法向服务器发送一个单字节的数据[/quote]
    你linux服务器SO_OOBINLINE是打开还是关闭的???

    点赞 评论 复制链接分享
  • allenhoo 无误吴 9年前

    Linux操作系统上强行关闭一个服务时,操作系统会发送RST报文给客户端, Java读取数据时,会报连接断开的异常。 你可以尝试在这个链接上read, Java会抛出异常,告诉你链接中断了。

    点赞 评论 复制链接分享
  • u011606457 _1_1_7_ 9年前

    研究得这么深入,对于[quote]此时判断isClosed为false,isBound和isConnected都是true,[/quote]我其实感觉很意外。

    试试看getOutputStream()
    和getInputStream()会不会抛出异常

    点赞 评论 复制链接分享

相关推荐