我試圖設置套接字的SO_KEEPALIVE
時間。SocketImpl設置選項中的套接字關閉異常
我創建了一個類SocketBuilder
來構建帶有SocketImpl的套接字實例。源代碼如下,
public class SocketBuilder {
private static SocketImpl si;
public static Socket createCVPSocket() throws Exception {
if (si == null) {
init();
}
return new CSocket(si);
}
private static void init() throws SocketException {
@SuppressWarnings("rawtypes")
Constructor cons = null;
try {
cons = Class.forName("java.net.SocksSocketImpl")
.getDeclaredConstructor();
} catch (NoSuchMethodException | SecurityException
| ClassNotFoundException e) {
throw new RuntimeException(
"Not able to access socket implementation.");
}
cons.setAccessible(true);
SocketImpl si = null;
try {
si = (SocketImpl) cons.newInstance();
} catch (InstantiationException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException e) {
throw new RuntimeException("Not able to create instance of socket.");
}
if (si != null) {
si.setOption(SocketImpl.SO_KEEPALIVE, new Integer(60));
}
}
private static class CSocket extends Socket {
protected CSocket(SocketImpl si) throws SocketException, Exception {
super(si);
}
}
public static void main(String[] args) {
try {
Socket sock = SocketBuilder.createCVPSocket();
System.out.println(sock);
} catch (Exception e) {
e.printStackTrace();
}
}
}
我得到java.net.SocketException: Socket Closed
異常。如果我刪除行si.setOption(SocketImpl.SO_KEEPALIVE, new Integer(60));
它工作正常。但我想設置SocketImpl.SO_KEEPALIVE
。我怎樣才能設置插座的SO_KEEPALIVE
?
java.net.SocketException套接字已關閉此異常意味着您關閉了套接字,然後繼續嘗試使用它,您是否可以提供socketImpl代碼 –