在公开-jdk-8:
这个jin函数: Java_java_net_PlainSocketImpl_socketSetOption:
/*
* SO_TIMEOUT is a no-op on Solaris/Linux
*/
if (cmd == java_net_SocketOptions_SO_TIMEOUT) {
return;
}文件: openjdk7/jdk/src/solaris/native/java/net/PlainSocketImpl.c
这是否意味着,在linux上,setOption of SO_TIMEOUT会被忽略?
我找不到linux的jin。但是solaris的代码似乎也适用于linux。
发布于 2015-12-31 23:08:02
不,它只是意味着它不是作为套接字实现的。有些平台不支持它。在这些平台上使用select()或朋友。
发布于 2020-05-06 12:47:22
solaris文件夹中的源代码也用于Linux。
SO_TIMEOUT在Java_java_net_PlainSocketImpl_socketSetOption0中被忽略。但是,当调用timeout时,AbstractPlainSocketImpl.setOption被保留为字段:
case SO_TIMEOUT:
if (val == null || (!(val instanceof Integer)))
throw new SocketException("Bad parameter for SO_TIMEOUT");
int tmp = ((Integer) val).intValue();
if (tmp < 0)
throw new IllegalArgumentException("timeout < 0");
// Saved for later use
timeout = tmp;
break;timeout在SocketInputStream中进行读取时使用
public int read(byte b[], int off, int length) throws IOException {
return read(b, off, length, impl.getTimeout());
}https://stackoverflow.com/questions/34551398
复制相似问题