什么';java.net.Socket.connect超时的准确性是多少?
我想知道这个方法的超时准确度是多少 最初我认为它是构建在顶部的,因此有一个10-15毫秒的错误() 但是在检查了源代码之后,看起来它所做的只是将调用委托给什么';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
这是否意味着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之后浏览源代码。你有实现的源代码吗?为了回应你的评论,我彻底编辑了我的原始答案。请看一看