Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';java.net.Socket.connect超时的准确性是多少?_Java_Sockets - Fatal编程技术网

什么';java.net.Socket.connect超时的准确性是多少?

什么';java.net.Socket.connect超时的准确性是多少?,java,sockets,Java,Sockets,我想知道这个方法的超时准确度是多少 最初我认为它是构建在顶部的,因此有一个10-15毫秒的错误() 但是在检查了源代码之后,看起来它所做的只是将调用委托给 这是否意味着java.net.Socket.connect(SocketAddress,int)不使用Object.wait,因此不会受到Object.wait的10-15毫秒错误的影响?首先,我希望套接字连接超时由OS/内核直接处理。C套接字API支持连接超时,因此我希望JVM本机实现将简单地委托给它 其次,为什么您关心网络连接上10-15

我想知道这个方法的超时准确度是多少

最初我认为它是构建在顶部的,因此有一个10-15毫秒的错误()

但是在检查了源代码之后,看起来它所做的只是将调用委托给


这是否意味着java.net.Socket.connect(SocketAddress,int)不使用Object.wait,因此不会受到Object.wait的10-15毫秒错误的影响?

首先,我希望套接字连接超时由OS/内核直接处理。C套接字API支持连接超时,因此我希望JVM本机实现将简单地委托给它

其次,为什么您关心网络连接上10-15毫秒的准确性?听起来你最终会得到一些非常脆弱的东西

看起来它所做的只是将调用委托给java.net.SocketImpl.connect(SocketaAddress,int)

这是
SocketImpl
类的抽象方法

实际实现它的子类(系统默认的
SocketImpl
隐式地从
SocketImplFactory.createSocketImpl()
中的
Socket
构造函数中检索)反过来又依赖于本机方法,因此不可能以独立于平台的方式知道不准确

--编辑(回复评论)

如果不使用通过受保护的
Socket(SocketImpl)
构造函数指定自定义
SocketImpl
Socket
子类,则由
Socket()
构造函数创建的标准
Socket
实例将使用
socksocketimpl
(这反过来扩展了
PlainSocketImpl

socksocketimpl.connect(SocketAddress地址,int超时)

召唤

super.connect(SocketAddress地址,int超时)
PlainSocketImpl.connect(SocketAddress地址,int超时)

这反过来又叫

PlainSocketImpl.connectToAddress(InetAddress地址、int端口、int超时)

这反过来又叫

PlainSocketImpl.doConnect(InetAddress地址、int端口、int超时)

这反过来又叫

PlainSocketImpl.socketConnect(InetAddress地址、int端口、int超时)

这是一个私有的本地方法,我们不知道里面有什么:)

所以不,我们不是依赖对象。等等

--


有关源代码,请参阅和

否,我想知道java.net.Socket.connect是否使用基于Object.wait或某些内部函数的计时。@Pacier“Why do you care…?”的答案可能会帮助响应者给出您想要的答案。您还必须定义“内部”。委派到原生OS套接字实现是我认为是“内部”的。我无法在SocketImpl之后浏览源代码。你有实现的源代码吗?为了回应你的评论,我彻底编辑了我的原始答案。请看一看