假设在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关闭
[quote]8. SO_OOBINLINE
public boolean getOOBInline() throws SocketException
public void setOOBInline(boolean on) throws SocketException
如果这个Socket选项打开,可以通过Socket类的sendUrgentData方法向服务器发送一个单字节的数据[/quote]
你linux服务器SO_OOBINLINE是打开还是关闭的???
研究得这么深入,对于[quote]此时判断isClosed为false,isBound和isConnected都是true,[/quote]我其实感觉很意外。
试试看getOutputStream()
和getInputStream()会不会抛出异常
Linux操作系统上强行关闭一个服务时,操作系统会发送RST报文给客户端, Java读取数据时,会报连接断开的异常。 你可以尝试在这个链接上read, Java会抛出异常,告诉你链接中断了。